You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:52:45