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

Node.js中HTTP 405错误排查:数据库更新请求遭客户端拦截

Node.js HTTP 405错误及相关问题修复

问题核心成因

  1. 路由路径配置错误:POST请求无法匹配到对应处理路由,触发405 Method Not Allowed错误
  2. 请求字段不匹配:客户端发送的字段名与服务器接收逻辑不一致
  3. 未返回响应:数据库操作完成后未向客户端返回响应,请求挂起
  4. SQL注入风险:直接拼接SQL语句存在安全隐患

分步修复方案

1. 修正路由路径(ups.js)

原代码中路由路径使用相对路径./routes/ups错误,需改为根路径下的/ups(因index.js已通过app.use挂载该路由模块):

// ups.js 路由定义修正
router.post("/ups", async (req, res) => {
  // 原有逻辑保持,仅修改路由路径
});

2. 统一请求字段名

客户端发送的payload字段为available,但服务器中用req.body.av接收,导致校验失败。需同步字段名:

// ups.js 字段校验与接收修正
if(
  req.body == null ||
  req.body.id == null ||
  req.body.available == null // 改为available
) {
  return res.status(StatusCodes.BAD_REQUEST).json({
    status: StatusCodes.BAD_REQUEST,
    title: ReasonPhrases.BAD_REQUEST,
    data: { error: "Invalid data provided" }
  });
}

var id = req.body.id;
var av = req.body.available; // 改为available

3. 补充响应返回逻辑

数据库操作完成后未返回响应,导致请求一直挂起。需在回调中添加响应:

// ups.js 数据库操作回调修正
db.query(sql, function(err, result) {
  if (err) {
    console.error(err);
    return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
      status: StatusCodes.INTERNAL_SERVER_ERROR,
      title: ReasonPhrases.INTERNAL_SERVER_ERROR,
      data: { error: "Database operation failed" }
    });
  }
  console.log('record updated'); // 修正日志描述(是update不是insert)
  console.log(req.body.id);
  console.log(req.body.available);
  return res.status(StatusCodes.OK).json({
    status: StatusCodes.OK,
    title: ReasonPhrases.OK,
    data: { message: "Record updated successfully" }
  });
});

4. 修复SQL注入风险

直接拼接SQL语句存在安全隐患,改用参数化查询:

// ups.js SQL语句修正为参数化查询
var sql = "UPDATE `pc_status` SET available = ? WHERE `id` = ?";
db.query(sql, [av, id], function(err, result) {
  // 原有回调逻辑
});

5. 关于res.redirect的历史错误

之前出现的"无法在发送响应头后设置头"错误,是因为res.redirect会发送响应头,若在异步操作中调用时,可能已存在其他响应输出导致冲突。目前注释后该问题已解决,后续使用需确保一次请求仅发送一次响应。


客户端代码适配

客户端原逻辑判断201状态码,修复后服务器返回200 OK,需调整判断:

// script.js 状态码判断修正
.then((data) => {
  if(data.status == 200) { // 改为200
    console.log("Good!");
  } else {
    console.log("Error occured");
    console.log(data);
  }
})

内容的提问来源于stack exchange,提问作者MEAries

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:55