管理项目服务器连接数据库

之前的中后台管理项目的数据都存到了json文件里面持久化存储,现在学了mongodb数据库,自然要存到数据库里面保存。首先创建数据库之后把json数据导入数据库的集合中。

​编辑

​编辑

导入之后就可以在服务器引入mongoose库然后调用conncet连接到我们现在启用的数据库服务器然后操作里面的数据了。

首先连接数据库服务器。

​编辑

连接到数据库之后创建数据库里面对应集合的model对象来对文档增删改查。

​编辑

然后就可以替换fs模块了,也可以省略很多数组逻辑比如筛选什么的,可以直接用findOneAndUpdate省略好多步骤。

比如这里的订单列表和司机数据。

php 复制代码
const express = require('express')
const router = express.Router()
const ExcelJS = require('exceljs');
const orderList = require('../models/orderList.cjs')
const cityList = require('../models/cityList.cjs')
const vehicleList = require('../models/vehiclelists.cjs')
const cityData = require('../models/citydatas.cjs')
const driverList =require('../models/driverlists.cjs')
router.use((req,res,next)=>{
    if(req.path === '/export'){
      return  next()
    }
    if(req.user){
        next()
    }
    else{
        res.send({
            code:500001,
            msg:'token失效'
        })
    }
})
// 获取订单列表
// 获取订单列表
router.get('/list', async (req, res) => {
  try {
    const { orderId, userName, state } = req.query
    // 拼接查询条件
    const query = {}
    if (orderId) query.orderId = orderId
    if (userName) query.userName = userName
    if (state) query.state = +state
    console.log(query)
    // 查 MongoDB
    const list = await orderList.find(query)
    console.log()
    console.log('这是进行中的订单信息',list)
    res.send({
      code: 0,
      data: {
        list: list,
        page: {
          pageNum: 1,
          pageSize: 10,
          total: list.length
        }
      },
      msg: 'success'
    })
  } catch (error) {
    res.status(500).send({ code: 1, msg: '获取订单列表失败' })
  }
})
// 获取订单详情
router.get('/detail/:orderId', async (req, res) => {
  try {
    const {orderId} = req.params
    const order = await orderList.findOne({orderId})
    if (order) {
      res.send({
        code: 0,
        msg: '',
        data: order
      })
    } else {
      res.send({
        code: 1,
        msg: '订单不存在',
        data: {}
      })
    }
  } catch (error) {
    res.status(500).send({
      code: 1,
      msg: '获取订单详情失败'
    })
  }
})
// 获取城市列表
router.get('/citylist', async (req, res) => {
  try {
    const data = await cityList.find({})
    res.send({ code: 0, data: data,msg:'' })
  } catch (error) {
    res.status(500).json({ code: 1, message: '获取城市列表失败' })
  }
})

// 获取车型列表
router.get('/vehiclelist', async (req, res) => {
  try {
    const data = await vehicleList.find({})
    res.send({ code: 0, data: data })
  } catch (error) {
    res.status(500).json({ code: 1, message: '获取车型列表失败' })
  }
})
// 创建订单
router.post('/create', async (req, res) => {
  try {
    // 新订单数据
    const newOrder = {
      _id: Date.now().toString(), // 唯一ID
     orderId:T${ Date.now().toString()}, // 唯一OrderID
      ...req.body,              // 前端传来的数据
      createTime: new Date().toISOString() // 创建时间
    }

    orderList.create(newOrder)
    //首先是数据,然后是格式比如数组或者对象转化 2用来控制缩进和美化输出。
    res.send({
      code: 0,
      msg: '创建订单成功',
      data: newOrder
    })
  } catch (error) {
    res.status(500).send({ code: 1, msg: '创建订单失败' })
  }
})
// 更新订单信息
router.post('/edit', async (req, res) => {
  const { orderId, route: newRouter } = req.body
  if (!orderId || !Array.isArray(newRouter)) {
    return res.status(400).json({ msg: '参数不合法' })
  }
  const list = await orderList.findOneAndUpdate({orderId},{
    $set:{route:newRouter}
  })
  res.json({
    code: 0,
    msg: '更新成功',
    data: list
  })
})
// 删除订单
router.post('/delete', async (req, res) => {
  const { id } = req.body
  await orderList.deleteOne({orderId:id})
  res.json({ msg: '删除成功',code:0,data:{} })
})
function format(state){
    console.log('aaaa')
    const arr={
        1:'进行中',
        2:'完成',
        3:'超时',
        4:'取消'
    }
    return arr[state]
}
//导出
router.post('/export', async (req, res) => {
  try {
    const params = req.body;
    console.log('导出参数', params);
    let orders = await orderList.find({});

  const newData=  orders.map(item=>{
        item={
            ...item,
            state: format(item.state)
        }
        return item
    })
    const workbook = new ExcelJS.Workbook();
    const worksheet = workbook.addWorksheet('订单列表');
    worksheet.columns = [
      { header: '订单ID', key: 'orderId', width: 20 },
      { header: '城市', key: 'cityName', width: 15 },
      { header: '车型', key: 'vehicleName', width: 15 },
      { header: '下单时间', key: 'createTime', width: 20 },
      { header: '订单状态', key: 'state', width: 15 },
    ];
    worksheet.addRows(newData);

    res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    res.setHeader('file-name', encodeURIComponent('订单列表.xlsx'));
    await workbook.xlsx.write(res);
    res.end();

  } catch (err) {
    console.error(err);
    res.status(500).send('导出失败');
  }
});
//获取城市数据
router.get('/cityData/:cityId', async (req, res) => {
  const { cityId } = req.params
 console.log(cityId)
  try {
   const city = await cityData.findOne({cityId})
    res.send({ code: 0, data: city.points })
  } catch (err) {
    res.status(500).send({ code: 1, msg: '读取数据失败' })
  }
})
//获取司机数据
router.get('/driver/list',async(req,res)=> {
    const {driverName,accountStatus} =req.query
    let newobj ={}
    if(driverName){
      newobj.driverName=driverName
    }
    if(accountStatus){
      newobj.accountStatus=accountStatus
    }
    console.log(newobj)
    const list = await driverList.find(newobj)

    res.send({
        code:0,
        data:{
            list:list
        },
        msg:''
    })
})
module.exports = router;

连接的话需要在入口文件导入。

php 复制代码
require('./tools/connect.cjs')
const express = require('express')
const fs = require('fs/promises')
const path = require('path')
const jwt = require('jsonwebtoken')
const app = express()
const dataRouter = require('./router/getData.cjs')
const usersRouter = require('./router/userList.cjs')
const deptList = require('./router/deptList.cjs')
const menuList = require('./router/menuList.cjs')
const roleList = require('./router/roleList.cjs')
const orderList = require('./router/orderList.cjs')
const usersModel = require('./models/usersList.cjs')
const secret = 'hello' 
async function  getUser() {
        const data = await fs.readFile(path.resolve(__dirname,'data/usersList.json'))
        //console.log(JSON.parse(data))
        return JSON.parse(data)
}
//暴露图片资源文件夹
app.use('/images', express.static(path.join(__dirname, 'public/images')))
app.use((req, res, next) => {
   if (req.url === '/user/login' || req.url.startsWith('/images')) {
    return next()
  }
  if (req.url !== '/user/login') {
    const token = req.headers['authorization']
    try {
      const decoded = jwt.verify(token, secret)
      req.user = decoded
      console.log(decoded)
      next()
    } catch (e) {
      return res.status(201).send({
        code: 500001,
        data: {},
        msg: 'token 失效或未登录'
      })
    }
  } else {
    next()
  }
})
 //解析body
app.use(express.urlencoded({ extended: true }))
// 支持 application/json
app.use(express.json()) 

//引入图形数据接口
app.use('/order',dataRouter)
//引入用户接口
app.use('/users',usersRouter)
//引入列表接口
app.use('/dept',deptList)
//引入菜单接口
app.use('/menu',menuList)
//引入角色接口
app.use('/roles',roleList)
//引入命令接口
app.use('/order',orderList)
app.post('/user/login', async (req, res) => {
  const { userName, userPwd } = req.body
  //console.log(userName)
  const user = await usersModel.findOne({userName:userName})
  //console.log(user)
//  console.log(user)
  if (user&&userPwd==='111111') {
   const token = jwt.sign({
  id: user._id,
  userName: user.userName,
  roleList: user.roleList
}, secret, { expiresIn: '10d' })
    res.send({
      code: 0,
      data: { token },
      msg: '登录成功'
    })
  } else {
    res.send({
      code: 1,
      data: {},
      msg: '账号密码错误'
    })
  }
})
app.listen('3000',()=>{
    console.log('服务器启动了')
   // usersModel.find().then(item=>{console.log(item)})
})

这样就成功用数据库替换了json文件存储。

相关推荐
喵手7 分钟前
如何利用Java的Stream API提高代码的简洁度和效率?
java·后端·java ee
掘金码甲哥13 分钟前
全网最全的跨域资源共享CORS方案分析
后端
m0_4805026421 分钟前
Rust 入门 生命周期-next2 (十九)
开发语言·后端·rust
薛晓刚25 分钟前
当MySQL的int不够用了
数据库
张醒言27 分钟前
Protocol Buffers 中 optional 关键字的发展史
后端·rpc·protobuf
鹿鹿的布丁43 分钟前
通过Lua脚本多个网关循环外呼
后端
墨子白44 分钟前
application.yml 文件必须配置哇
后端
SelectDB技术团队1 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
xcya1 小时前
Java ReentrantLock 核心用法
后端
用户466537015051 小时前
如何在 IntelliJ IDEA 中可视化压缩提交到生产分支
后端·github