Express修改res.send为res.status写法后仍报废弃错误如何解决
问题根因
你收到的废弃警告并非来自你修改的then分支响应代码,而是来自catch异常分支的代码:
res.send("ERROR AT FACE ID : ", error);
Express 4.x 版本中,res.send()如果传入2个及以上参数,会被识别为已经废弃的旧用法res.send(状态码, 响应体),因此触发警告。你之前仅修改了正常请求的返回逻辑,没有处理异常分支的代码,所以警告会一直出现。
解决步骤
- 修正catch分支的响应写法,不要给
res.send()/res.json()/res.jsonp()这类方法直接传入多个参数,要先调用res.status()设置状态码,再调用返回方法传入响应内容:
.catch(function (error) { // 字符串拼接后返回 res.status(500).send(`ERROR AT FACE ID : ${error.message || JSON.stringify(error)}`); // 也可以用JSON格式返回错误,更规范: // res.status(500).json({ // msg: "ERROR AT FACE ID", // error: error // }) });
- 修正完成后必须重启Express服务,修改的代码才会生效。
通用定位方法
如果修改后仍然出现警告,可以按以下方法精准定位问题代码:
- 全局搜索项目中所有
res.send(、res.json(、res.jsonp(调用,检查是否存在传入2个及以上参数的写法,覆盖所有路由、中间件文件 - 在项目入口文件最顶部添加警告栈打印逻辑,触发请求后可以直接看到警告对应的具体文件和行号:
process.on('warning', (warning) => { console.warn('警告名称:', warning.name); console.warn('警告内容:', warning.message); console.warn('触发位置栈:', warning.stack); });
另外注意你之前尝试的res.jsonp(200, response_data)写法也不符合规范,正确写法是res.status(200).jsonp(response_data)。
内容的提问来源于stack exchange,提问作者Sergio Lara Vásquez
相关产品推荐
相关产品推荐

