当前位置: 首页 > news >正文

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

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

http://www.dtcms.com/a/340891.html

相关文章:

  • Linux 文本处理三剑客:awk、grep、sed 完全指南
  • 中小型企业是否需要使用高防服务器
  • Linux-文本搜索工具grep
  • C++进阶-----C++11
  • Hangfire定时部署(.NET 8 + SQL Server)
  • Android 资源替换:静态替换 vs 动态替换
  • PHP特有的安全漏洞及渗透测试利用方法(通俗易懂)
  • 项目1总结其一
  • 49 C++ STL模板库18-类模板-pair
  • ROS 2系统Callback Group概念笔记
  • 突发!DeepSeek刚刚开源V3.1-Base
  • UTF-8 编解码可视化分析
  • 【Day 30】Linux-SQL语句
  • C/C++ 与嵌入式岗位常见笔试题详解
  • MYSQL为什么会发生死锁,怎么解决
  • 第三阶段数据-3:数据库脚本生成,备份与还原,分离与附加
  • configtx通道配置文件
  • RHCA08内存管理
  • 对称加密算法
  • 数据库DML语言(增、删、改)
  • 闪电赋能全链路:领码SPARK一体化创新平台
  • 基于HTTP3的WebTransport实践
  • 基于 Java 和 MySQL 的精品课程网站
  • 在完全没有无线网络(Wi-Fi)和移动网络(蜂窝数据)的环境下,使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本2)
  • Ubuntu 重连usb设备(断电和不断电方案)亲测可行
  • 亚马逊新品爆单策略:从传统困境到智能突破
  • LeetCode热题100--101. 对称二叉树--简单
  • C++ 力扣 438.找到字符串中所有字母异位词 题解 优选算法 滑动窗口 每日一题
  • 《数据之舞》
  • GitHub宕机生存指南:从应急协作到高可用架构设计