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
相关产品推荐
相关产品推荐

