Node.js Express结合MySQL开发RESTful API时数据插入异常处理
RESTful API 插入数据异常修复方案
核心问题根因
你现在碰到的写入值为+req.body.Name+字面量、无法读取请求参数的问题,由三个明确的代码错误导致:
- JS字符串拼接语法错误:所有被单引号包裹的内容都会被JS当成纯静态文本处理,你把原本用来做变量拼接的
+符号完全包裹在SQL语句的单引号内部,JS引擎根本不会识别这是拼接操作,只会把这串内容当成写死的SQL文本执行。 - body-parser未挂载为Express中间件:代码里仅引入了body-parser模块,没有通过
app.use()注册到请求处理链路,哪怕拼接语法正确,req.body也会是undefined,根本拿不到PostMan传入的参数值。 - 直接把用户输入拼接到SQL语句的写法存在SQL注入安全风险,不符合mysql Node.js模块的官方使用规范。
分步修复操作
1. 正确注册body-parser中间件
在所有路由定义之前添加中间件注册逻辑,确保Express能正确解析请求体内容:
// 解析JSON格式请求体(对应PostMan选择raw-JSON的传参模式) app.use(bodyparser.json()); // 解析x-www-form-urlencoded格式的表单请求体 app.use(bodyparser.urlencoded({ extended: false }));
2. 替换错误的SQL语句写法
优先使用mysql模块提供的参数化查询语法,既可以彻底解决字符串拼接的语法错误,还能自动转义特殊字符防范SQL注入风险:
- 把原来写死的SQL语句里的动态值替换为
?占位符 - 把要传入的参数值按占位符的顺序整理成数组,作为
connection.query()方法的第二个参数传入
// 替换原来的错误SQL声明 var sql = 'INSERT INTO `tblltest` (id, name) VALUES (?, ?)'; connection.query(sql, [null, req.body.Name], function(error, rows, fields){ if(!error){ console.log('Successful added!! \n'); resp.json(rows); }else{ console.log('Error in adding', error); } });
如果你一定要手动拼接SQL字符串(不推荐,存在安全风险),要注意JS字符串的引号边界:必须把拼接符号放到SQL字符串的引号外部,不能包裹在静态文本内部,正确的语法对照为:
// 不推荐写法,仅做语法参考 var sql = 'INSERT INTO `tblltest` values(null, "' + req.body.Name + '")';
3. 补充数据库连接错误处理
建议在连接初始化完成后添加连接状态检测逻辑,避免连接异常时无明确报错难以排查:
connection.connect(function(err) { if (err) { console.error('数据库连接异常:', err.message); return; } console.log('数据库连接成功'); });
内容的提问来源于stack exchange,提问作者Usama Hafeez Official
相关产品推荐
相关产品推荐

