Node.js中使用mongoskin操作mongoDB實例
來源:易賢網(wǎng) 閱讀:2905 次 日期:2014-09-29 11:16:32
溫馨提示:易賢網(wǎng)小編為您整理了“Node.js中使用mongoskin操作mongoDB實例”,方便廣大網(wǎng)友查閱!

一、廢話

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

二、幾個需要說的概念

(1)數(shù)據(jù)庫:同關系數(shù)據(jù)庫一樣。

(2)集合: 關系數(shù)據(jù)庫中的表。

(3)文檔: 類比關系數(shù)據(jù)庫的記錄,實則是JSON對象。

(4)數(shù)據(jù)庫設計:建議考慮NoSQL設計,拋棄關系數(shù)據(jù)的設計思想;其實NoSQL數(shù)據(jù)庫設計博大精深,需要不斷地在項目中實踐。

(5)用戶體系:每一個數(shù)據(jù)庫都有自己的管理員,可以:

代碼如下:

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開發(fā)基礎設施

(0) npm install mongoskin 安裝mongoskin

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

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

代碼如下:

{

"dbname":"TEST",

"port": "7868",

"host": "127.0.0.1",

"username": "test",

"password": "test"

}

(2)創(chuàng)建util相關類mongo.js :導出一個DB對象

代碼如下:

var mongoskin = require('mongoskin'),

config = require('./../config.json');

/*

* @des:導出數(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)構建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: 創(chuàng)建一條記錄

* @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,因為需要一些狀態(tài)表示成功和失敗,后期可以拓展為驗證碼錯誤、短信驗證錯誤、用戶名錯誤等

代碼如下:

module.exports = {

/*

* 成功狀態(tài)

*

* */

success: {

status: 1,

message: 'OK'

},

/*

* 失敗狀態(tài)

*

* */

fail: {

status: 0,

message: 'FAIL'

},

/*

* 兩次輸入的密碼不一致

* */

repeatPassword: {

status: 0,

message: '兩次輸入的密碼不一致'

}

};

更多信息請查看IT技術專欄

更多信息請查看腳本欄目
易賢網(wǎng)手機網(wǎng)站地址:Node.js中使用mongoskin操作mongoDB實例

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)