项目我用的是koa脚手架,koa-router做路由,通过mongodb来连接MongoDB.
这里用到的知识点是async await,不了解用法的建议先阅读:异步神器async-await
实例
先设置一个公共方法 mongo.js,这里只放一个查询方法:
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/';
module.exports = {
/**
* @param option
* {
* tableName <String> 集合名
* obj <object> 查询数据
* }
*/
find:function (option={}) {
return new Promise(function (resolve,reject) {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbase = db.db("blog"); //数据库名
dbase.collection(option.tableName).find(option.obj).toArray(function(err, result) { // 返回集合中所有数据
if (err) throw err;
db.close();
resolve(result);
});
});
})
}
}
然后在路由 routes/index.js
const router = require('koa-router')();
const mongodb = require('./common/mongo');
router.get('/list', async (ctx, next) => {
ctx.state.appName = '管理博客';
ctx.state.data ={
tpl:"list"
}
ctx.state.data.list =await mongodb.find({
tableName:'list',
obj:{}
});
await ctx.render('index/index'); //渲染页面
});
然后就是渲染页index.ejs,我这里采用了ejs模板引擎,如下代码:
<% if(locals.data&&locals.data.list){%>
<% for(var i = 0; i<locals.data.list.length;i++){%>
<%= locals.data.list[i].categories%>
<%}%>
<%}%>
数据库结构如下:

总结:
这里简单说一下,await跟着一个Promise,它必须和async一起用,当Promise resolve() 后再赋值,因为读取数据是异步,所以不单 ctx.render('index/index') ;需要await,mongo.find方法也要await.
252



被折叠的 条评论
为什么被折叠?



