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

之前的中后台管理项目的数据都存到了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文件存储。

相关推荐
金色天际线-1 小时前
Nginx 优化与防盗链配置指南
java·后端·spring
luckys.one4 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
言之。6 小时前
Django中的软删除
数据库·django·sqlite
阿里嘎多哈基米7 小时前
SQL 层面行转列
数据库·sql·状态模式·mapper·行转列
抠脚学代码7 小时前
Ubuntu Qt x64平台搭建 arm64 编译套件
数据库·qt·ubuntu
jakeswang8 小时前
全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析
数据库·mysql
weixin_456904278 小时前
Spring Boot 用户管理系统
java·spring boot·后端
Heliotrope_Sun8 小时前
Redis
数据库·redis·缓存
一成码农8 小时前
MySQL问题7
数据库·mysql
吃饭最爱8 小时前
JUnit技术的核心和用法
数据库·oracle·sqlserver