DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> Node.js中使用mongoskin操作mongoDB實例教程
Node.js中使用mongoskin操作mongoDB實例教程
編輯:關於JavaScript     

一、廢話

從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 "XX\MongoDB\data\db" --logpath "XX\MongoDB\log\mongo.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: '兩次輸入的密碼不一致'
    }
 };

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved