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


Posted in Javascript onSeptember 28, 2014

一、废话

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

    }

 };
Javascript 相关文章推荐
javascript prototype 原型链
Mar 12 Javascript
jquery 模式对话框终极版实现代码
Sep 28 Javascript
javascript 语法基础 想学习js的朋友可以看看
Dec 16 Javascript
picChange 图片切换特效的函数代码
May 06 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
Jun 24 Javascript
jquery自定义函数的多种方法
Jan 09 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
Jun 09 Javascript
javaScript的函数对象的声明详解
Feb 06 Javascript
JavaScript实现级联菜单的方法
Jun 29 Javascript
jQuery.each使用详解
Jul 07 Javascript
Bootstrap模态对话框的简单使用
Apr 29 Javascript
vue2.0 + ele的循环表单及验证字段方法
Sep 18 Javascript
js使用for循环与innerHTML获取选中tr下td值
Sep 26 #Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Sep 26 #Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 #Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 #Javascript
jQuery判断当前点击的是第几个li的代码
Sep 26 #Javascript
javascript 自定义回调函数示例代码
Sep 26 #Javascript
jquery和js实现对div的隐藏和显示方法
Sep 26 #Javascript
You might like
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
Laravel监听数据库访问,打印SQL的例子
2019/10/24 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
列表内容的选择
2006/06/30 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
Python爬取国外天气预报网站的方法
2015/07/10 Python
Python 爬虫的工具列表大全
2016/01/31 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
英国最大的海报商店:GB Posters
2018/03/20 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
优质的学校老师推荐信
2013/10/28 职场文书
给老师的检讨书
2014/02/11 职场文书
社区春季防火方案
2014/06/02 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers