Express如何区分同一路由POST请求实现数据库增删操作
同Express路由处理多类型POST请求实现方案
核心思路
在POST请求体中增加操作类型标识字段,服务端接收请求后根据该字段判断执行对应数据库操作,无需修改现有路由路径,改动成本最低。
- 约定
action字段为操作类型标识:create代表新增数据,delete代表删除数据 - 新增请求正常携带业务字段+
action: "create" - 删除请求携带待删除数据ID+
action: "delete"
客户端代码调整
原有新增逻辑补充action字段,新增删除请求逻辑:
// 数据新增请求 const createData = { action: "create", Item, ID }; const createOptions = { method: "POST", body: JSON.stringify(createData), headers: { "Content-type": "application/json", }, }; fetch("/api", createOptions); // 数据删除请求 const deleteData = { action: "delete", ID: targetDeleteId // 传入待删除对象的实际ID }; const deleteOptions = { method: "POST", body: JSON.stringify(deleteData), headers: { "Content-type": "application/json", }, }; fetch("/api", deleteOptions);
服务端代码调整
注意:原有代码缺失
nedb依赖的引入语句,直接运行会抛出Datastore is not defined错误,下述代码已补全该逻辑,同时补全了数据库操作的错误响应,避免请求挂起
将原有单新增逻辑的POST路由改为分支处理:
const express = require("express"); const app = express(); app.listen(3000, () => console.log("listening at 3000")); app.use(express.static("public")); app.use(express.json({ limit: "1mb" })); const Datastore = require("nedb"); const database = new Datastore("database.db"); database.loadDatabase(); app.get("/api", (request, response) => { database.find({}, (err, data) => { if (err) { console.log("数据库查询错误"); response.status(500).json({ error: "数据查询失败" }); return; } response.json(data); }); }); app.post("/api", (request, response) => { const { action, ID, ...bizData } = request.body; switch (action) { case "create": // 原有新增逻辑 database.insert({ ...bizData, ID }, (err, newRecord) => { if (err) { response.status(500).json({ error: "数据新增失败" }); return; } response.json({ msg: "新增成功", data: newRecord }); }); break; case "delete": // 新增删除逻辑 if (!ID) { response.status(400).json({ error: "缺少待删除数据ID" }); return; } database.remove({ ID }, {}, (err, deleteCount) => { if (err) { response.status(500).json({ error: "数据删除失败" }); return; } response.json({ msg: `删除成功,共处理${deleteCount}条数据` }); }); break; default: response.status(400).json({ error: "非法操作类型" }); } });
优化建议
- 若后续接口操作类型持续增加,建议拆分路由(如
POST /api/create、POST /api/delete),或遵循RESTful规范使用DELETE请求方法承载删除操作,提升代码可维护性 - 生产环境使用时需要补充参数校验、权限校验逻辑,避免非法操作
内容的提问来源于stack exchange,提问作者Schleimfresse
相关产品推荐
相关产品推荐

