Node.js中使用mongoskin操作mongoDB實(shí)例
一、廢話
從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,但是寫起來(lái)代碼有很多需要注意的,比如連接的關(guān)閉操作等等...因此,在node.js開發(fā)環(huán)境下我這里推薦使用mongoskin。
二、幾個(gè)需要說的概念
(1)數(shù)據(jù)庫(kù):同關(guān)系數(shù)據(jù)庫(kù)一樣。
(2)集合: 關(guān)系數(shù)據(jù)庫(kù)中的表。
(3)文檔: 類比關(guān)系數(shù)據(jù)庫(kù)的記錄,實(shí)則是JSON對(duì)象。
(4)數(shù)據(jù)庫(kù)設(shè)計(jì):建議考慮NoSQL設(shè)計(jì),拋棄關(guān)系數(shù)據(jù)的設(shè)計(jì)思想;其實(shí)NoSQL數(shù)據(jù)庫(kù)設(shè)計(jì)博大精深,需要不斷地在項(xiàng)目中實(shí)踐。
(5)用戶體系:每一個(gè)數(shù)據(jù)庫(kù)都有自己的管理員,可以:
use dbname; db.addUser('root_1' , 'test');
(7)建議更改對(duì)外端口
(8)啟動(dòng)服務(wù)(這是win下,linux下稍作修改):
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
{
"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ì)象
var mongoskin = require('mongoskin'),
config = require('./../config.json');
/*
* @des:導(dǎo)出數(shù)據(jù)庫(kù)連接模塊
* */
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ì)象即可
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ò)誤等
module.exports = {
/*
* 成功狀態(tài)
*
* */
success: {
status: 1,
message: 'OK'
},
/*
* 失敗狀態(tài)
*
* */
fail: {
status: 0,
message: 'FAIL'
},
/*
* 兩次輸入的密碼不一致
* */
repeatPassword: {
status: 0,
message: '兩次輸入的密碼不一致'
}
};
- nodejs+mongodb+vue前后臺(tái)配置ueditor的示例代碼
- 利用Vue.js+Node.js+MongoDB實(shí)現(xiàn)一個(gè)博客系統(tǒng)(附源碼)
- node.js操作mongoDB數(shù)據(jù)庫(kù)示例分享
- node.js連接mongoDB數(shù)據(jù)庫(kù) 快速搭建自己的web服務(wù)
- nodejs連接mongodb數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查
- AngularJS + Node.js + MongoDB開發(fā)的基于高德地圖位置的通訊錄
- Node.js對(duì)MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)模糊查詢的方法
- Vue+Node實(shí)現(xiàn)商品列表的分頁(yè)、排序、篩選,添加購(gòu)物車功能詳解
- node和vue實(shí)現(xiàn)商城用戶地址模塊
- nodejs(officegen)+vue(axios)在客戶端導(dǎo)出word文檔的方法
- Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫(kù)及頁(yè)面數(shù)據(jù)傳遞操作實(shí)例分析
相關(guān)文章
利用node.js+mongodb如何搭建一個(gè)簡(jiǎn)單登錄注冊(cè)的功能詳解
這篇文章主要給大家介紹了關(guān)于利用node.js+mongodb如何搭建一個(gè)簡(jiǎn)單登錄注冊(cè)功能的相關(guān)資料,文中通過示例代碼介紹非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07NodeJs版本過高無(wú)法啟動(dòng)Vue項(xiàng)目報(bào)錯(cuò)的幾種解決方法
在開發(fā)vue項(xiàng)目時(shí),我們通常使用nodejs作為項(xiàng)目的運(yùn)行環(huán)境,但是有時(shí)候,由于nodejs版本過高,可能會(huì)導(dǎo)致vue項(xiàng)目啟動(dòng)報(bào)錯(cuò),這篇文章主要給大家介紹了關(guān)于NodeJs版本過高無(wú)法啟動(dòng)Vue項(xiàng)目報(bào)錯(cuò)的幾種解決方法,需要的朋友可以參考下2023-12-12Node.js API詳解之 os模塊用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 os模塊用法,結(jié)合實(shí)例形式分析了Node.js API中os模塊基本功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05