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

Node.js编写对接MySQL的POST API返回204错误无响应如何解决

问题定位与修复方案

1. 插入结果判断逻辑错误

MySQL的INSERT操作返回的results对象不存在length属性,只有SELECT类查询的返回结果才是带length的数组。插入成功时可通过results.affectedRows判断是否生效,你当前写的results.length > 0判断永远为假,即便插入成功也会走到else分支返回204,这是触发错误码的直接原因。

2. SQL语句写法错误

你同时混用了字符串拼接和预编译传参两种写法,两边都不符合规范:

  • 预编译传参需要用?作为占位符,不需要手动拼接变量、也不需要手动加引号
  • 现有写法拼接出来的SQL会携带多余的引号符号,大概率会触发语法错误,同时存在SQL注入风险

3. datetime字段缺省配置问题

如果你的datetime字段没有设置DEFAULT CURRENT_TIMESTAMP默认值,插入时未传该字段值会触发非空约束报错,直接进入错误分支。

修正后的代码

var deletelog = (req, res) => {
  const articleid = req.body.articleid;
  const userid = req.body.userid;

  // 改用预编译占位符?,自动处理参数转义
  var sql = `INSERT INTO deletearticles_log  (articleid, userid) VALUES (?, ?)`;

  connection.query(sql,[articleid, userid], function (error, results, fields) {
    if (error) {
      res.send({
        "code":400,
        "failed":"error ocurred",
        "error": error
      })
    }else{
      // 改用affectedRows判断插入是否成功
      if(results.affectedRows > 0){
        res.send({
          "code":200,
          result : results
        });
      }
      else{
        res.send({
          "code":204,
          "success":"Record insertion Failed!"
        });
      }
    }
  });
}

额外检查项

如果调整代码后仍报错,可先执行SQL修改表结构给datetime字段加默认值:

ALTER TABLE deletearticles_log MODIFY COLUMN datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 02:54:04