国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Node.js中使用mongoskin操作mongoDB實(shí)例

2019-11-20 14:05:40
字體:
供稿:網(wǎng)友

一、廢話

從13年1月份接觸mongodb進(jìn)行開發(fā),開發(fā)了旅游標(biāo)簽服務(wù)、微博標(biāo)簽檢索系統(tǒng)、地圖服務(wù)、web APP服務(wù)...使用MongoDB的場(chǎng)景從.NET、JAVA環(huán)境轉(zhuǎn)到了node.js平臺(tái)。越發(fā)覺Node.js和mongodb結(jié)合感覺的很好。感覺mongodb和node.js是天生的一對(duì)。的確,mongodb的客戶端是JS的解析引擎。因此,選擇mongodb和node.js做產(chǎn)品原型也是很nice的選擇。網(wǎng)上,遇到網(wǎng)友詢問mongodb的開發(fā),選擇哪個(gè)driver最好,以前一直是使用原生的driver,但是寫起來代碼有很多需要注意的,比如連接的關(guān)閉操作等等...因此,在node.js開發(fā)環(huán)境下我這里推薦使用mongoskin。

二、幾個(gè)需要說的概念

(1)數(shù)據(jù)庫:同關(guān)系數(shù)據(jù)庫一樣。
(2)集合: 關(guān)系數(shù)據(jù)庫中的表。
(3)文檔: 類比關(guān)系數(shù)據(jù)庫的記錄,實(shí)則是JSON對(duì)象。
(4)數(shù)據(jù)庫設(shè)計(jì):建議考慮NoSQL設(shè)計(jì),拋棄關(guān)系數(shù)據(jù)的設(shè)計(jì)思想;其實(shí)NoSQL數(shù)據(jù)庫設(shè)計(jì)博大精深,需要不斷地在項(xiàng)目中實(shí)踐。
(5)用戶體系:每一個(gè)數(shù)據(jù)庫都有自己的管理員,可以:

復(fù)制代碼 代碼如下:

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

(7)建議更改對(duì)外端口
(8)啟動(dòng)服務(wù)(這是win下,linux下稍作修改):
復(fù)制代碼 代碼如下:

mongod --dbpath "XX/MongoDB/data/db" --logpath "XX/MongoDB/log/mongo.log" --logappend -auth --port 7868

三、搭建mongodb開發(fā)基礎(chǔ)設(shè)施

(0) npm install mongoskin 安裝mongoskin

這里不介紹Node.js安裝、package等機(jī)制。

(1)創(chuàng)建配置文件 config.json

復(fù)制代碼 代碼如下:

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

(2)創(chuàng)建util相關(guān)類mongo.js :導(dǎo)出一個(gè)DB對(duì)象

復(fù)制代碼 代碼如下:

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

/*
 * @des:導(dǎo)出數(shù)據(jù)庫連接模塊
 * */
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)構(gòu)建CRUD的基礎(chǔ)類:為了減少重復(fù)CURD代碼,只需要傳入相關(guān)的JSON對(duì)象即可

復(fù)制代碼 代碼如下:

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: 創(chuàng)建一條記錄
    * @model: 插入的記錄,JSON格式的model
    * @callback:回調(diào),返回插入成功的記錄或者失敗信息
    *
    * */
    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:回調(diào),返回符合要求的記錄或者失敗信息
    *
    * */
    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)構(gòu)建status.json,因?yàn)樾枰恍顟B(tài)表示成功和失敗,后期可以拓展為驗(yàn)證碼錯(cuò)誤、短信驗(yàn)證錯(cuò)誤、用戶名錯(cuò)誤等

復(fù)制代碼 代碼如下:

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

    /*
    * 失敗狀態(tài)
    *
    * */
    fail: {
        status: 0,
        message: 'FAIL'
    },

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成都市| 阜宁县| 恭城| 老河口市| 柘城县| 阜康市| 安多县| 灯塔市| 云阳县| 梁河县| 镇原县| 修文县| 融水| 宁阳县| 洛宁县| 江阴市| 房山区| 宜君县| 桂阳县| 灯塔市| 南安市| 仁布县| 宜兴市| 蒙城县| 桂阳县| 江北区| 绥宁县| 嘉义市| 阳曲县| 大田县| 永福县| 十堰市| 开封县| 淄博市| 龙口市| 夏河县| 乐陵市| 盐城市| 谢通门县| 兴城市| 桐梓县|