JSON Server中如何将更新后的TestCase数组写入数据库端点?
解决JSON Server自定义POST端点无法更新数据库的问题
要实现通过uuid匹配更新/添加TestCase并持久化到数据库,核心是要利用JSON Server底层的lowdb库完成内存修改+文件写入的操作——只修改内存数组不会同步到db.json文件。以下是具体实现步骤:
1. 基础准备
确保已安装依赖:
npm install json-server lowdb
创建server.js替代直接用命令行启动JSON Server,这样才能自定义路由并操作数据库。
2. 完整实现代码
const jsonServer = require('json-server') const server = jsonServer.create() const router = jsonServer.router('db.json') // 你的数据库文件路径 const middlewares = jsonServer.defaults() const low = require('lowdb') const FileSync = require('lowdb/adapters/FileSync') // 初始化lowdb实例,和JSON Server共用同一个db文件 const adapter = new FileSync('db.json') const db = low(adapter) server.use(middlewares) server.use(jsonServer.bodyParser) // 必须启用,才能解析POST请求体 // 自定义POST端点:更新或添加TestCase server.post('/test-cases/update-or-add', (req, res) => { const incomingTc = req.body const currentTcs = db.get('testCases').value() // 获取当前数据库中的TestCase数组 // 通过uuid查找匹配项 const matchIndex = currentTcs.findIndex(tc => tc.uuid === incomingTc.uuid) if (matchIndex !== -1) { // 存在则替换对应位置的元素 currentTcs[matchIndex] = incomingTc } else { // 不存在则追加到数组 currentTcs.push(incomingTc) } // 关键步骤:将更新后的数组写入数据库文件 db.set('testCases', currentTcs).write() // 返回响应 res.status(200).json(incomingTc) }) // 挂载默认路由 server.use(router) server.listen(3000, () => { console.log('JSON Server running on http://localhost:3000') })
3. 核心注意事项
- 必须调用
write()方法:db.set(...)只会修改内存中的数据,write()才会将变更同步到db.json文件,这是你之前数据库未更新的核心原因。 - 共用同一个db文件:确保lowdb实例和JSON Server的router使用相同的db.json路径,避免出现内存数据和文件数据不一致的情况。
- 启用body解析中间件:
server.use(jsonServer.bodyParser)是获取请求体数据的前提,否则req.body会为空。
4. 启动方式
用以下命令启动服务:
node server.js
内容的提问来源于stack exchange,提问作者Joshua Reisbord
相关产品推荐
相关产品推荐

