性能不是很好的连接方式
var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:2707/'
// 存在的数据库
var dbName = 'koa'
// 连接数据库
MongoClient.connect(url,(err, client) => {
if(err){
console.log(err)
return
}
var db = client.db(dbName)
// 给数据库里面添加数据
// 要确保数据库存在user表
db.collection('user').insertOne(['username': "小明", 'age': 18, 'sex': "男"], (err,result) => {
if(!err) {
consloe.log("成功")
client.close()
}
})
// 查询数据
db.collection('user').find({})
})
这种连接方式如果有多个要求进行多次数据的连接,性能并不是很好。
优化后的连接方式,koa2连接mongodb
这次优化
配置文件config.js
// 配置文件config.js
var app = {
dbUrl: 'mongodb://localhost:2707/',
dbName: 'koa'
}
// 将这个配置文件暴露出去
model.exports = app
连接数据库文件dbClient.js
var MongoClient = require('mongodb').MongoClient
var Config = require('./config.js')
class Db{
static getInstance(){
// 防止多次实例化,解决实例不共享的问题
if(!Db.instance){
Db.instance=new Db()
}
return
}
constructor(){
this.dbClient = '' // 放db对象
this.connect(); // 实例化的时候就连接数据库
}
// 连接数据库
connect() {
let _this = this
return new Promise((resolve,reject) => {
// 防止数据库多次连接
if(!_this.dbClient){
MongoClient.connect(Config.dburl, (err, client) => {
if(err){
reject(err)
console.log(err)
}else{
var db = client.db(Config.dbName)
_this.dbClient= db
resolve(_this.dbClient)
}
})
}
// 之前有连接后dbClient 存在一个值,有这个值就会执行这一步
else {
resolve(_this.dbClient)
}
})
}
// 插入
insert() {
}
// 查询
find(collectionName, query) {
return new Promise((resolve,reject) => {
this.connect().then((db) => {
var result = db.collection(collectionName).find(query)
result.toAraay((err,docs){
if(err){
reject(err)
return
}
resolve(docs)
})
})
})
}
// 更新
updata() {
}
}
// 测试
var Db = Db.getInstance();
Db.fine('user',{}).then((data) => {
console.log(data)
})
// 暴露出去
model.exports = Db.getInstance()
在koa中使用
var Koa = require('koa'),
router = require('koa-router')(),
path = require('path'),
DB = reequire('./module/db.js')
var app = new Koa()
var router = new Router()
router.get('/', async (ctx) => {
var result = await DB.find('user', {})
ctx.body = result
console.log(result)
})
app.use(router.routes())
app.use(router.allowedMethods())
app.listen(3000)