Express框架处理POST请求时使用parseInt转换参数报错求助
报错根因与解决方案
你遇到的报错基本是以下几个场景导致的,按优先级排查修改即可:
- 场景1:res.send直接返回数值触发状态码识别错误
Express的res.send()方法接收数字参数时,会将其作为HTTP状态码处理,数值超出合法状态码范围就会直接抛出错误。
修改方法:把求和结果转为字符串后再返回,将res.send(sum)替换为res.send(String(sum))即可。 - 场景2:请求体参数不存在/名称不匹配
你当前配置的bodyParser.urlencoded仅能解析表单格式的请求体,需要同时满足两个条件才能正常拿到req.body参数:- 前端提交的表单输入框
name属性必须严格和你取值的字段名一致,即两个输入框分别设置name="num1"、name="num2" - 如果前端是用fetch/axios等提交JSON格式的请求,需要额外添加JSON解析中间件:
app.use(bodyParser.json()) - 前端提交的表单输入框
- 场景3:参数非法导致parseInt返回NaN
如果传入的参数为空、非数字字符串,parseInt会返回NaN,后续逻辑可能触发异常,可以增加合法性校验:
app.post('/', function (req, res) { const num1 = parseInt(req.body.num1); const num2 = parseInt(req.body.num2); if (isNaN(num1) || isNaN(num2)) { return res.send('请输入合法的数字参数'); } const sum = num1 + num2; res.send(String(sum)); })
内容的提问来源于stack exchange,提问作者pintu kumar
相关产品推荐
相关产品推荐

