您好,欢迎访问一九零五行业门户网

Node.js中使用mongoskin操作mongoDB实例_node.js

一、废话
从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: '两次输入的密码不一致'
    }
 };
其它类似信息

推荐信息