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

 更新时间:2014年09月28日 11:51:18   作者:mingaixin  
这篇文章主要介绍了Node.js中使用mongoskin操作mongoDB实例,Mongous是一个轻量级的nodejs 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: '两次输入的密码不一致'
    }
 };

相关文章

  • 使用pify实现Node.js回调函数的Promise化

    使用pify实现Node.js回调函数的Promise化

    使用pify库,你可以非常便利地将任何遵循Node.js回调风格的函数转换为返回Promise对象的函数,从而使得你的异步代码更加清晰和易于维护,本文通过丰富的代码示例引导你如何有效地利用pify,需要的朋友可以参考下
    2024-06-06
  • 如何在命令行判断node.js启动了没有(最新)

    如何在命令行判断node.js启动了没有(最新)

    这篇文章主要介绍了如何在命令行判断node.js启动了没有,使用 tasklist 命令列出所有正在运行的进程,并使用 findstr 命令过滤出 Node.js 进程,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Node.js中路径处理模块path详解

    Node.js中路径处理模块path详解

    相信大家都知道在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。因为部分文档说的不够清晰,还有部分因为接口的平台差异性。本文就给大家详细介绍下关于Node.js中的路径处理模块path,希望能对大家学习或者使用模块path有所帮助,下面来一起看看吧。
    2016-11-11
  • 浅谈node node-sass sass-loader版本对应问题

    浅谈node node-sass sass-loader版本对应问题

    本文主要介绍了浅谈node node-sass sass-loader版本对应问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • node执行cmd或shell命令使用介绍

    node执行cmd或shell命令使用介绍

    这篇文章主要为大家介绍了node执行cmd或shell命令的使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 详解Node.js 中使用 ECDSA 签名遇到的坑

    详解Node.js 中使用 ECDSA 签名遇到的坑

    这篇文章主要介绍了详解Node.js 中使用 ECDSA 签名遇到的坑,主要是使用 Node.js 的 Crypto 模块无法校验网络传输过来的签名结果,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • express框架通过ejs模板渲染输出页面实例分析

    express框架通过ejs模板渲染输出页面实例分析

    这篇文章主要介绍了express框架通过ejs模板渲染输出页面的方法,结合实例形式分析了express框架使用ejs模版引擎渲染输出的相关操作技巧与使用注意事项,需要的朋友可以参考下
    2023-05-05
  • Nodejs学习笔记之Stream模块

    Nodejs学习笔记之Stream模块

    nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,这种方式是把文件内容全部读入内存,然后再写入文件,对于小型的文本文件,这没有多大问题,比如grunt-file-copy就是这样实现的。
    2015-01-01
  • node连接redis的方法实现

    node连接redis的方法实现

    本文主要介绍了node连接redis的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 傻瓜式解读koa中间件处理模块koa-compose的使用

    傻瓜式解读koa中间件处理模块koa-compose的使用

    这篇文章主要介绍了傻瓜式解读koa中间件处理模块koa-compose的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10

最新评论