express dao

11 篇文章 0 订阅
4 篇文章 0 订阅

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)
  })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值