Node.js中使用mongoskin操作mongoDB实例
来源:易贤网 阅读:2848 次 日期:2014-09-29 11:16:32
温馨提示:易贤网小编为您整理了“Node.js中使用mongoskin操作mongoDB实例”,方便广大网友查阅!

一、废话

从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: '两次输入的密码不一致'

}

};

更多信息请查看IT技术专栏

更多信息请查看脚本栏目
易贤网手机网站地址:Node.js中使用mongoskin操作mongoDB实例
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65099533/13759567129 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:易贤网
云南网警报警专用图标