用node和express+mongodb实现数据的增删改查

372 阅读3分钟

准备工作: 1、连接mongodb数据库 2、启动node服务 3、打开mongodb可视化工具Robo 3T

  1. //node的入口文件index.js中
const express = require('express');
const app = express();
/*统一设置接口的请求头*/
app.all("/api/*",function(req,res,next){
  res.header("Access-Control-Allow-Origin","*")//*表示可以跨域
  res.header("Acess-Control-Allow-Headers","Content-Type,X-Requested-Width,Authorization");
  res.header("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS");
  res.header("X-Powered-By","3.2.1");
  res.header("Content-Type","application/json;charset=utf-8");
  next();
})
/*使用中间件--请求的url编码格式为键=值&键=值格式*/
app.use(express.urlencoded({extended:false}));
/*json格式参数即{键:值,键:值}
会自动加入req.body属性,这个属性中就包含了post请求所传入的参数,格式为json格式*/
app.use(express.json());
/*post请求的接口4--通过post请求进行文件上传*/
const multer = require('multer');//引入包
const fs = require('fs');
const path = require('path');
const Picture = require('./db/schema/picture');
console.log('Picture',Picture)
let upload = multer({
  storage:multer.diskStorage({
    //设置文件存储位置
    destination:function(req,file,cb){
      let date = new Date();
      let year = date.getFullYear();
      let month = (date.getMonth()+1).toString().padStart(2,'0');
      let day = date.getDate();
      let dir = './uploads/'+year+month+day;
      console.error('dir',dir)
      //判断目录是否存在,没有则创建
      if(!fs.existsSync(dir)){
          fs.mkdirSync(dir,{recursive:true})//recursive<boolean>递归地复制目录 默认false
      }
      cb(null,dir)
    },
    //设置文件名称
    filename:function(req,file,cb){
      let fileName = file.fieldname+'-'+Date.now()+path.extname(file.originalname);//path.extname用于获取文件的扩展名
      cb(null,fileName)//fileName就是上传文件的文件名
    }
  })
})
/*图片上传接口*/
  app.post('/api/uploads',upload.single('file'),function(req,res){
    let pic_a = new Picture({
      file:req.body.file,
      uid:req.body.uid
    })
    pic_a.save();
  res.send({data:req.body})
})
/*图片查询接口*/
app.get('/api/getPictures',async(req,res)=>{
  const allItems = await Picture.find();
  res.send({data:allItems})
})
/*图片删除接口*/
app.post('/api/deletePictures',(req,res)=>{
  console.log('删除的req',req.body.id);
  Picture.deleteOne({"uid":req.body.id}).then(()=>{
    console.log("删除成功")
  })
})
/*表格数据查询接口*/
const User = require('./db/schema/user');
app.use('/api/query',async(req,res)=>{
  const allItems = await User.find();
  res.send({data:allItems})
})
/*表格数据删除接口*/
app.use('/api/delete',async(req,res)=>{
  User.deleteOne({"_id":req.body.id}).then(()=>{
    console.log("删除成功")
  })
  res.end('ok');
})
/*表格数据新增接口*/
app.use('/api/add',async(req,res)=>{
  console.log("新增")
  const user = {};
  if(req.body.name) user.name = req.body.name;
  if(req.body.age) user.age = req.body.age;
  if(req.body.address) user.address = req.body.address;
  new User(user).save().then((r)=>{
    res.json(r);
  })
})
/*表格更新接口*/
app.use('/api/edit/:id',(req,res)=>{
  const query = {_id:req.params.id};
  const update = {$set:{name:req.body.name,age:req.body.age,address:req.body.address}};
  User.findByIdAndUpdate(query, update).then(r=>{//findByIdAndUpdate是mongoose提供的更新数据库的方法
  if(!r){
    return res.status(400).json('数据不存在')
  }
  res.json(r);
});
})
/*按条件查询接口*/
app.use('/api/queryByContion',async(req,res)=>{
  const {query} = req;
  const user = await User.find(query);
  res.send(user)
})
app.listen(8888);
console.log('Server running')
  1. //连接数据库的index.js文件
/*step1:导入模块*/
const mongoose = require('mongoose');
/*step2:连接数据库*/
var DB_URL = 'mongodb://localhost:27017/Student'; // 数据库为 edujb51net
mongoose.connect(DB_URL);
/** 监听连接成功 */
mongoose.connection.on('connected', function () {
  console.log('Mongoose connection open to ' + DB_URL);
})

/** 监听连接异常 */
mongoose.connection.on('error', function (err) {
  console.log('Mongoose connection error:' + err);

})
module.exports = mongoose;

3.//picture.js文件

const mongoose = require('../index');
/*创建Schema Schema对应着MongoDB中的Collection,Schema定义了Collection中的Document属性*/
let Schema = mongoose.Schema;
let picSchema = new Schema({ //Schema是模型的配置对象,定义了保存在MongoDB中的文档可以具有哪些属性
  file:Object,
  uid:String
})
/*创建Model Model是由Schema编译的来的构造函数,Model的实例是一条Document,Model被用来创造和获取MongoDB中的数据*/
module.exports = mongoose.model('Picture',picSchema);//存在数据库中的表名就是users

4.//user.js文件

const mongoose = require('../index');
let Schema = mongoose.Schema;
let userSchema = new Schema({ 
  name:String,
  age:Number,
  address:String
})
module.exports = mongoose.model('User',userSchema);

--------------vue页面中的用法--------------

//增加数据
  axios({
    url:'/aaa/api/add',
    method:'post',
    data:{...formState},
  })
//删除数据
axios({
    url:'/aaa/api/delete',
    method:'post',
    data:{id:id}
  })
//修改数据
  axios({
    url:'/aaa/api/edit/'+currentId.value,
    method:'post',
    data:{...formState}
  })
//查询数据
   axios({
    url:'/aaa/api/query',
    method:'get'
  })
//条件查询
 axios({
  url:'/aaa/api/queryByContion',
  method:'get',
  params,
 })