前面写了一篇文章介绍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