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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:57:17