dao.js
var MongoClient = require('mongodb').MongoClient;
class DAO {
constructor(url, dbName, collectionName) {
this.url = url;
this.dbName = dbName;
this.collectionName = collectionName;
}
_connect () {
return new Promise((resolve, reject) => {
MongoClient.connect(this.url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => { //client参数就是连接成功之后的mongoclient
if (err) return reject(err);
resolve(client)
})
})
}
//插入
//doucument 要插入的数据 arr||obj
//insertMany 是否插入多条 boolean
insert (documents, insertMany) {
return new Promise((resolve, reject) => {
this._connect().then((client) => {
let db = client.db(this.dbName); //调用test数据库
if (insertMany) {
db.collection(this.collectionName).insertMany(documents).then((res) => { //user表插入多条
resolve(res)
client.close()
})
return
}
db.collection(this.collectionName).insertOne(documents).then((res) => { //user表插入单条
resolve(res);
client.close();
})
})
})
}
//查询
query (document, pageConfig) {
document = document || {}; //查找的对象,空就查找全部
pageConfig = pageConfig || { amount: 0, page: 0 } //amount条数,page页数
let resData = []; //存放查找到的数据
return new Promise((resolve, reject) => { //返回一个Promise
this._connect().then((client) => { //调用构造函数连接数据库服务器
let db = client.db(this.dbName); //调用test数据库
let cursor = db.collection(this.collectionName).find(document).limit(pageConfig.amount).skip(pageConfig.amount * (pageConfig.page - 1)); //查找
cursor.each((err, data) => {
if (err) return reject(err);
if (data != null) { //数据不为空就放入数组里
resData.push(data)
} else {
resolve(resData);
client.close();
}
})
})
})
}
//删除
del (query, deleteMany) {
return new Promise((resolve, reject) => {
this._connect().then(client => { //连接mongodb服务
let db = client.db(this.dbName); //连接test数据库
if (deleteMany) {
db.collection(this.collectionName).deleteMany(query).then(res => {
resolve(res);
client.close()
})
return;
}
db.collection(this.collectionName).deleteOne(query).then(res => {
resolve(res);
client.close()
})
})
})
}
//修改
update (filter, updater) {
return new Promise((resolve, reject) => {
this._connect().then(client => {
let updaterCpy = { $set: updater };
let db = client.db(this.dbName); //连接test数据库
db.collection(this.collectionName).updateMany(filter, updaterCpy).then(res => {
resolve(res);
client.close()
})
})
})
}
}
module.exports = DAO
index.js
const express = require('express')
const app = express()
const formidable = require('formidable') //用来处理post
const DAO = require('./dao')
const dao = new DAO('mongodb://localhost:27017/', 'test', 'user')
app.get('/init', (req, res) => { //获取数据
// console.log(req.query.age) 获取前端传来的age
if (req.query.age) { //前端有传来特定查询条件
let age = { age: req.query.age }
dao.query(age).then(restlt => {
res.send({ restlt })
})
} else { //查询全部
dao.query().then(restlt => {
res.send({ restlt })
})
}
})
app.post('/add', (req, res) => { //添加数据
let form = new formidable.IncomingForm()
form.parse(req, (err, fields, files) => {
let obj = { name: fields.name, text: fields.text, time: new Date() }
dao.insert(obj).then(result => {
res.send('插入成功')
})
})
})
app.post('/del', (req, res) => { //删除
let form = new formidable.IncomingForm()
form.parse(req, (err, fields, files) => {
let obj = { name: fields.name }
dao.del(obj).then(result => {
res.send('删除成功')
})
})
})
app.post('/update', (req, res) => { //修改
let form = new formidable.IncomingForm()
form.parse(req, (err, fields, files) => {
let filter = { name: fields.filterName }
let update = { text: fields.updateText }
dao.update(filter, update).then(result => {
res.send('修改成功')
})
})
})
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
})
前端查询全部
axios({
method: 'get',
url: '/init'
}).then((res) => {
console.log(res)
})
前端查询指定条件age=‘2’
axios({
method: 'get',
url: '/init',
params: {
age: 2
}
}).then((res) => {
console.log(res)
})
前端插入数据
<button @click='add()'> 插入数据</button>
add: function () {
axios({
method: 'post',
url: '/add',
data: {
name: 'haha',
text: 'now you see'
}
}).then((res) => {
console.log(res)
})
}
前端删除数据
<button @click='del()'> 删除数据</button>
del: function () {
axios({
method: 'post',
url: '/del',
data: {
name: 'haha'
}
}).then((res) => {
console.log(res)
})
}
前端修改数据
<button @click='updata()'> 修改数据</button>
updata: function () {
axios({
method: 'post',
url: '/update',
data: {
filterName: 'haha',
updateText: 'abcdefg'
}
}).then((res) => {
console.log(res)
})
}