標籤:des style blog color io os 使用 java ar
一、廢話從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對象
1 var mongoskin = require(‘mongoskin‘), 2 config = require(‘./../config.json‘); 3 4 /* 5 * @des:匯出資料庫連接模組 6 * */ 7 module.exports = (function(){ 8 var host = config.host, 9 port = config.port,10 dbName = config.dbname,11 userName = config.username,12 password = config.password,13 str = ‘mongodb://‘ + userName + ‘:‘ + password + ‘@‘ + host +‘:‘ + port+ ‘/‘ + dbName;14 15 var option = {16 native_parser: true17 };18 19 return mongoskin.db(str, option);20 })();
(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: ‘兩次輸入的密碼不一致‘ } };
四、使用CRUD插入一條資料
var user = { username: ‘山鬼謠‘, password: ‘sgAGHAHSWJWH(已經md5後)‘};crud.create(user, function(data){ if (data.status) { return res.send(status.success); } return res.send(status.fail); });
基於Node.js平台mongoDB開發——mongoskin(by vczero)