管理项目服务器连接数据库
之前的中后台管理项目的数据都存到了json文件里面持久化存储,现在学了mongodb数据库,自然要存到数据库里面保存。首先创建数据库之后把json数据导入数据库的集合中。
导入之后就可以在服务器引入mongoose库然后调用conncet连接到我们现在启用的数据库服务器然后操作里面的数据了。
首先连接数据库服务器。
连接到数据库之后创建数据库里面对应集合的model对象来对文档增删改查。
然后就可以替换fs模块了,也可以省略很多数组逻辑比如筛选什么的,可以直接用findOneAndUpdate省略好多步骤。
比如这里的订单列表和司机数据。
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 = orderIdif (userName) query.userName = userNameif (state) query.state = +stateconsole.log(query)// 查 MongoDBconst 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.paramsconst 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(), // 唯一IDorderId: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.bodyif (!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.bodyawait 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.paramsconsole.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.querylet 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;
连接的话需要在入口文件导入。
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 = decodedconsole.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文件存储。