1.根目录/module/config.js
/**
* 配置文件
*/
var app = {
dbUrl: 'mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb',
dbName: 'koa'
}
module.exports = app;
2.根目录/module/db.js
/**
* DB库
*/
var MongoClient = require('mongodb').MongoClient;
var Config = require('./config.js');
class Db {
/**
* 单例
* 解决多次实例化,实例不共享的问题
*/
static getInstance() {
if (!Db.instance) {
Db.instance = new Db();
}
return Db.instance;
}
constructor() {
this.dbClient = ''; /*属性 存放db对象*/
this.connect(); /*实例化的时候就连接数据库*/
}
connect() { /*连接数据库*/
let _that = this;
return new Promise((resolve, reject) => {
if (!_that.dbClient) { /*解决数据库多次连接的问题*/
MongoClient.connect(Config.dbUrl, (err, client) => {
if (err) {
reject(err);
} else {
_that.dbClient = client.db(Config.dbName);
resolve(_that.dbClient);
}
})
} else {
resolve(_that.dbClient);
}
})
}
find(collectionName, json) {
return new Promise((resolve, reject) => {
this.connect().then((db) => {
var result = db.collection(collectionName).find(json);
result.toArray((err, docs) => {
if (err) {
reject(err);
return;
}
resolve(docs);
})
})
})
}
insert() {
//
}
}
module.exports = Db.getInstance();
3.根目录/app.js
// 引入模块
const Koa = require('koa');
const router = require('koa-router')(); /*引入是实例化路由 推荐*/
const render = require('koa-art-template');
const path = require('path');
const DB = require('./module/db.js');
// 实例化
let app = new Koa();
// 配置 koa-art-template 模板引擎
render(app, {
root: path.join(__dirname, 'views'), // 视图的位置
extname: '.html', // 后缀名
debug: process.env.NODE_ENV !== 'production' // 是否开启调试模式
})
router.get('/', async (ctx) => {
console.time('start1');
let result = await DB.find('user', {});
console.log(result);
console.timeEnd('start1');
await ctx.render('index', {
list: {
name: '张三'
}
});
})
router.get('/news', async (ctx) => {
console.time('start2');
let result = await DB.find('user', {});
console.log(result);
console.timeEnd('start2');
ctx.body = '新闻页面';
})
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000);
.