首頁 > web前端 > js教程 > 主體

Node.js中使用mongoskin操作mongoDB實例_node.js

WBOY
發布: 2016-05-16 16:35:10
原創
1641 人瀏覽過

一、廢話

從13年1月份接觸mongodb進行開發,開發了旅遊標籤服務、微博標籤檢索系統、地圖服務、web APP服務...使用MongoDB的場景從.NET、JAVA環境轉到了node.js平台。越發覺Node.js和mongodb結合感覺的很好。感覺mongodb和node.js是天生的一對。的確,mongodb的客戶端是JS的解析引擎。因此,選擇mongodb和node.js做產品原型也是很nice的選擇。網路上,遇到網友詢問mongodb的開發,選擇哪個driver最好,以前一直是使用原生的driver,但是寫起來代碼有很多需要注意的,比如連接的關閉操作等等...因此,在node.js開發環境下我這裡推薦使用mongoskin。

二、幾個需要說的概念

(1)資料庫:同關係資料庫一樣。
(2)集合: 關係資料庫中的表。
(3)文件: 類比關係型資料庫的記錄,實則是JSON物件。
(4)資料庫設計:建議考慮NoSQL設計,拋棄關聯式資料的設計想法;其實NoSQL資料庫設計博大精深,需要不斷在專案中實踐。
(5)使用者係統:每個資料庫都有自己的管理員,可以:

複製程式碼 程式碼如下:

use dbname; db.addUser('root_1' , 'test');

(7)建議更改對外埠
(8)啟動服務(這是win下,linux下稍作修改):
複製程式碼 程式碼如下:

mongod --dbpath "XXMongoDBdatadb" --logpath "XXMongoDBlogmongo.log" --logappend -auth --port 7868

三、搭建mongodb開發基礎設施

(0) npm install mongoskin 安裝mongoskin

這裡不介紹Node.js安裝、package等機制。

(1)建立設定檔 config.json

複製程式碼 程式碼如下:

{
    "dbname":"TEST",
    "port": "7868",
    "host": "127.0.0.1",
    "username": "test",
    "password": "test"
}

(2)建立util相關類別mongo.js :匯出一個DB物件

複製程式碼 程式碼如下:

var mongoskin = require('mongoskin'),
    config = require('./../config.json');

/*
 * @des:匯出資料庫連線模組
 * */
module.exports = (function(){
    var host = config.host,
        port = config.port,
        dbName = config.dbname,
        userName = config.username,
        password = config.password,
        str = 'mongodb://' userName ':' password '@' host ':' port '/' dbName;

    var option = {
        native_parser: true
    };

    return mongoskin.db(str, option);
})();

(3)建構CRUD的基礎類別:為了減少重複CURD程式碼,只需要傳入相關的JSON物件即可

複製程式碼 程式碼如下:

var db = require('./mongo.js'),
    status = require('./status'),
    mongoskin = require('mongoskin');


var CRUD = function(collection){
    this.collection = collection;
    db.bind(this.collection);
};

CRUD.prototype = {
    /*
    * @des: 建立一筆記錄
    * @model: 插入的記錄,JSON格式的model
    * @callback:回調,返回插入成功的記錄或失敗訊息
    *
    * */
    create: function(model, callback){
        db[this.collection].save(model, function(err, item){
            if(err) {
                return callback(status.fail);
            }
            item.status = status.success.status;
            item.message = status.success.message;
            return callback(item);
        });
    },

    /*
    * @des:讀一筆記錄
    * @query:查詢條件,Mongo查詢的JSON字面量
    * @callback:回調,回傳符合要求的記錄或失敗訊息
    *
    * */
    read: function(query, callback){
        db[this.collection].find(query).toArray(function(err, items){
            if(err){
                return callback(status.fail);
            }
            var obj = {
                status: status.success.status,
                message: status.success.message,
                items: items
            };

            return callback(obj);
        });
    },
    /*
    * @des:更新一筆記錄
    * @query:查詢條件,Mongo查詢的JSON字面量,此處為_id
    * @updateModel:需要更新的JSON格式的模型
    * @callback:返回成功或失敗訊息
    *
    * */
    update: function(query, updateModel, callback){
        var set = {set: updateModel};
        db[this.collection].update(query, set, function(err){
            if(err){
                return callback(status.fail);
            }else{
                return callback(status.success);
            }
        });
    },

    /*
    * @des:刪除一筆記錄
    * @query:查詢條件,Mongo查詢的JSON字面量
    * @callback:回傳失敗或成功的訊息
    *
    * */
    deleteData: function(query, callback){
        db[this.collection].remove(query, function(err){
            if(err){
                return callback(status.fail);
            }
            return callback(status.success);
        });
    }
};


module.exports = CRUD;

(4)建構status.json,因為需要一些狀態表示成功與失敗,後期可以拓展為驗證碼錯誤、簡訊驗證錯誤、使用者名稱錯誤等

複製程式碼 程式碼如下:

module.exports = {
    /*
    * 成功狀態
    *
    * */
    success: {
        status: 1,
        message: 'OK'
    },

    /*
    * 失敗狀態
    *
    * */
    fail: {
        status: 0,
        message: 'FAIL'
    },

    /*
    * 兩次輸入的密碼不一致
    * */
    repeatPassword: {
        status: 0,
        message: '兩次輸入的密碼不一致'
    }
 };

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板