原生MongoDB+express路由写起来代码会非常冗余。
比如:登录验证的路由 会这么写
app.post('/doLogin',function(req,res){
MongoClient.connect(DBurl,(err,db)=>{
if(err){
console.log(err);
return ;
}else{
let result = db.collection('user').find(req.body);
result.toArray((err,data)=>{
if(data.length!=0){
console.log(data);
req.session.userInfo = data[0];
res.redirect('/product')
}else{
res.send("<script>alert('账户名或密码错误');location.href='/login'</script>")
}
})
}
db.close();
})
})
如果路由多起来,则会给每个路由链接一次数据库,关闭一次数据库
如:
app.get('/login',()=>{
MongoClient.connect(url,(err,db)=>{
db.user.find();
db.close();
})
})
app.get('/main',()=>{
MongoClient.connect(url,(err,db)=>{
db.user.find();
db.close();
})
})
app.get('/out',()=>{
MongoClient.connect(url,(err,db)=>{
db.user.find();
db.close();
})
})
这时我们可以把连接数据库,还有增删改查封装一下
//这里是 db.js
const MongoClient = require('mongodb').MongoClient;
const ObjectID = require('mongodb').ObjectID;
const DBurl = 'mongodb://localhost:27017/productmanage';
function __connect(callback){
//定义连接数据库函数
MongoClient.connect(DBurl,(err,db)=>{
if(err){
console.log('数据库连接失败');
return 0 ;
}
callback(db); //回调函数用来查找数据
})
}
exports.ObjectID = ObjectID;
exports.find=(collectionName,json,callback)=>{
__connect(function(db){
let result = db.collection(collectionName).find(json);
result.toArray((error,data)=>{
console.log(data);
callback(error,data);
db.close(); //关闭数据库
})
})
}
exports.insert=(collectionName,json,callback)=>{
__connect(function(db){
db.collection(collectionName).insertOne(json,(error)=>{
if(error){
res.send('数据库插入失败');
}else{
console.log('数据插入成功');
callback();
db.close();
}
});
})
}
exports.delete=(collectionName,json,callback)=>{
__connect(function(db){
db.collection(collectionName).deleteOne(json,(error)=>{
if(error){
res.send('数据库删除失败');
}else{
console.log('数据删除成功');
callback();
db.close();
}
});
})
}
这时我们在外部引入 db.js 就可以简化我们的代码了
const DB = require('./module/db');
//修改后的代码
app.post('/doLogin',function(req,res){
DB.find('user',req.body,(error,data)=>{
if(data.length!=0){
req.session.userInfo = data[0];
res.redirect('/product')
}else{
res.send("<script>alert('账户名或密码错
误');location.href='/login'</script>")
}
})
})
//没修改前的代码
app.post('/doLogin',function(req,res){
MongoClient.connect(DBurl,(err,db)=>{
if(err){
console.log(err);
return ;
}else{
let result = db.collection('user').find(req.body);
result.toArray((err,data)=>{
if(data.length!=0){
console.log(data);
req.session.userInfo = data[0];
res.redirect('/product')
}else{
res.send("<script>alert('账户名或密码错误');location.href='/login'</script>")
}
})
}
db.close();
})
})