直接上代码,封装mongo文件。然后再app.js 中引用
// mongodb 操作包
const mongodb = require('mongodb').MongoClient;
const ObjectId = require('mongodb').ObjectId
//配置文件
const config = require('./config/index');
// 根据状态判断是否有用户名
let state = null;
if (!!config.username && !!config.password) {// 有用户名密码
state = true;
} else {// 没有用户名密码
state = false;
};
// 定义基本类
class app {
//默认初始化执行方法
constructor() {
// 存放mongodb连接后的对象
this.dbClient = '';
};
// 连接
connect() {
if (state) {// 有用户名密码
return new Promise((resolve, reject) => {
if (!this.dbClient) {
mongodb.connect('mongodb://' + config.username + ':' + config.password + '@' + config.address + ':' + config.port + '/', {
useNewUrlParser: true
}, (err, client) => {
if (!err) {
this.dbClient = client.db(config.database);
resolve(this.dbClient);
} else {
reject(err);
};
});
} else {
resolve(this.dbClient);
};
});
} else {// 没有用户名密码
return new Promise((resolve, reject) => {
if (!this.dbClient) {
let url = `mongodb://${config.address}:${config.port}/`
mongodb.connect(url, { useNewUrlParser: true }, (err, client) => {
if (!err) {
this.dbClient = client.db(config.database);
resolve(this.dbClient);
} else {
reject(err);
};
});
} else {
resolve(this.dbClient);
};
});
};
};
// 添加
add(tableName, json) {
return new Promise((resolve, reject) => {
this.connect().then(db => {
db.collection(tableName).insert(json, (err, result) => {
if (!err) {
resolve(result);
return;
};
reject(err);
});
});
});
};
// 删除---_id
deleteId(tableName, json) {
return new Promise((resolve, reject) => {
this.connect().then(db => {
let params = {
_id: ObjectId(json._id)
}
db.collection(tableName).findOneAndDelete(params, (err, result) => {
if (!err) {
resolve(result);
return;
};
reject(err);
});
});
});
};
// 删除
remove(tableName, json) {
return new Promise((resolve, reject) => {
this.connect().then(db => {
console.log(json);
db.collection(tableName).remove(json, (err, result) => {
if (!err) {
resolve(result);
return;
};
reject(err);
});
});
});
};
// 更新
update(tableName, condition, json) {
return new Promise((resolve, reject) => {
this.connect().then(db => {
db.collection(tableName).updateOne(condition, {
$set: json
}, (err, result) => {
if (!err) {
resolve(result);
return;
};
reject(err);
});
});
});
};
// 查询--定向查询
find(tableName, json) {
return new Promise((resolve, reject) => {
this.connect().then(db => {
db.collection(tableName).findOne(json, (err, data) => {
if (!err) {
resolve(data);
return;
}
reject(err);
});
});
});
};
//分页查询 条件conditions
findPage(tableName, { pageNo = 1, pageSize = 10, _sort, ...conditions }) {
return new Promise((resolve, reject) => {
this.connect().then(db => {
let cDb = db.collection(tableName)
//分页数据
let result = cDb
.find(conditions)
.skip((pageNo - 1) * pageSize)
.limit(Number(pageSize))
.sort(_sort)
//分页总数
cDb.count(conditions).then(count => {
result.toArray((err, list) => {
if (!err) {
resolve({ list, count });
return;
}
reject(err);
});
}).catch(err => {
reject(err);
})
});
});
}
};
// 导出模块
module.exports = app
app.js中引用挂载到全局上
//链接数据库
let dbClass = require('./mongodb/index')
let db = new dbClass()
db.connect().then(_ => {
//链接成功后挂载到全局对象上
global.db = db
})
然后再接口中使用:
const router = require('./config/index')
//token创建
const Jwt = require('../utils/token/index')
/* 账号接口 */
let tables = 'account'
/*
* desc 账号密码是否正确
* params ${account、password}
* return ${}
*/
router.post('/account/login', function (req, res, next) {
let { account, password } = req.body
global.db.find(tables, { account }).then(data => {
if (data) {
//有账号
if (data.password != password) {
res.send(global.fail({}, '密码不正确'))
} else {
let token = new Jwt(data._id).generateToken()
let sendData = {
userId: data._id,
token: token
}
res.send(global.success(sendData, '登录成功'))
}
} else {
res.send(global.fail({}, '账号不存在'))
}
})
});
/*
* desc 获取用户信息-权限等
* params ${userId}
* return ${}
*/
router.get('/account/userInfo', function (req, res, next) {
let userId = req.query.userId
global.db.find(tables, { userId }).then(data => {
res.send(global.success(data, '查询数据成功'))
})
});
/*
* desc 新增账号
* params ${ account, password }
* return ${}
*/
router.post('/account/addAccount', async function (req, res, next) {
let db = global.db
let { account, password } = req.body
let data = await db.find(tables, { account })
if (data) {
res.send(success({}, '账号已存在'))
return
}
db.add(tables, { account, password }).then(data => {
res.send(success(data, '新增数据成功'))
})
});
/*
* desc 删除账号
* params ${userId}
* return ${}
*/
router.post('/account/removeAccount', function (req, res, next) {
let { userId } = req.body
db.deleteId(tables, { _id: userId }).then(data => {
res.send(success(data, '删除数据成功'))
})
});
module.exports = router;
git代码: