mongDB+nodejs的实践

4 篇文章 0 订阅
2 篇文章 0 订阅

前面写了一篇文章介绍mongodb的基本用法,很简单。现在来看下利用Nodejs的express框架搭建的一套后端服务器,数据据采用的是mongodb。

项目接口如下


前端用的Vue框架搭建的,这里不讲主要是讲后端Mock部分如何使用MongoDB。

1、安装MongoDB

     如果使用npm 管理工具的话,执行

     npm install  --save connect-mongo mongodb


2、配置数据

   db下有个dbconfig.js文件,配置mongodb的数据库信息   

var Db = require('mongodb').Db,
    Connection = require('mongodb').Connection,
    Server = require('mongodb').Server;

//module.exports = new Db(settings.db, new Server(settings.host, 27017, {}), {safe: true});
var dbconfig = {
    url: 'mongodb://localhost:27017/qindb'
};

// module.exports = new Db('qindb', new Server('localhost', 27017));
module.exports = dbconfig;


3、在mock中的服务器入口App.js中引入mongodb。    

var app = express();
var session    = require('express-session');
var MongoStore = require('connect-mongo')(session);
...
app.use(session({
    secret: settings.cookieSecret,
    store: new MongoStore({
        url: 'mongodb://localhost/qindb',
        autoRemove:'native'
    })
}));

MongoStore由引入connect-mongo创建并标明是session状态下的,使用app.use指明数据库的位置,即设置mongodb的url地址。


4、在model中操作数据库写入数据   

 直接看广告的model对象Ads中save方法的代码:

var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var config = require('../db/dbconfig');

function Ads(ads) {
    this.showWords = ads.showWords;
    this.tipsWords = ads.tipsWords;
    this.advertId = ads.advertId;
    this.imageUrl = ads.imageUrl;
    this.scriptLinkAttr = ads.scriptLinkAttr;
    this.showOrder = ads.showOrder;
}

Ads.prototype.save = function() {
    var ads = {
        showWords: this.showWords ,
        tipsWords: this.tipsWords,
        advertId: this.advertId,
        imageUrl: this.imageUrl ,
        scriptLinkAttr: this.scriptLinkAttr ,
        showOrder: this.showOrder 
    }
   
    MongoClient.connect(config.url, function(err, db) {
        db.collection('ads').insertOne(ads, {w:1}, function(error, result) {
        	assert.equal(null, error);                 
            db.close();
            return callback(error, result);
        });
    });
};

  先引入MongoClient,在构造函数中确定前端需要返回的数据字段。同时引进assert 包来持久化数据。

在Ads的原型上增加save增加广告的方法:

1、先获取此Ads实例上的数据

2、使用MongoClient.connect(url, cb)连接数据,并指定连接后的回调函数cb

3、mongodb连接操作会将error, db俩个参数参入回调函数cb

4、利用db.collection('ads')连接数据库的中的ads表(tables),返回的是一个database对象

5、连接上ads表后,insertOne(ads, {w: 1}, function(error, result){...})插入一条数据,并在回到用持久化数据和关闭数据。

整一个mongodb数据库往ads表中增加数据过程结束。


5、在model中操作数据库查询数据   

 直接看目录的model对象Catalog中get方法的代码:

Catalog.get = function(param, callback) {		
    MongoClient.connect(config.url, function(error, db) {
        if(error) {
            return callback(error);
        }
        var query = {};
        if (param) {
            query = param;
        }        
        db.collection('catalogs').find(query).sort({"modifyDate": 1}).toArray(function(error, docs) {                      
          
            db.close();
            if (error) {
                return callback(error);
            }            
            var catalogs = [];            
            docs.forEach(function(doc, index) {                
                var catalog = new Catalog(doc);
                catalogs.push(catalog);
            });
            return callback(null, catalogs);
        });
    });
};

前面的过程都差不多,在连接好数据库,再连接上catalogs表,再通过find查询到数据,后将数据装换成Array数组类型,返回的docs是文档集合。遍历docs生成Cataolog实例,最后返回执行回调方法。

整个的一个mongodb的配置,连接,增加和查询数据就完成了。


如有纰漏,欢迎指正。

项目源码 :https://github.com/nokelong/Qin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值