Express新手求助:PUT接口调用时遇res.send(status,body)弃用报错
Express PUT请求中res.send弃用错误排查
在使用Postman执行PUT更新操作时,出现了弃用警告:express deprecated res.send(status, body): Use res.status(status).send(body) instead,你的路由代码如下:
router.put("/admin/update_profile/:id", async (req, res) => { try { const id = req.params.id; const updatedData = req.body; const options = { new: true }; const result = await SomeModel.findByIdAndUpdate(id, updatedData, options); res.send(result); // res.status(200).send(result) } catch (err) { res.send("Error ", err); // res.status(404).send("Error ", err) } });
错误原因
问题出在catch块里的res.send("Error ", err)这行代码:
Express新版本已弃用res.send(status, body)这种同时传递状态码和内容的调用方式,你这里传入两个参数时,Express会尝试将第一个参数"Error "解析为状态码,这直接触发了弃用警告。
而try块里的res.send(result)是正常的——仅传递一个内容参数时,Express默认使用200状态码,也可以显式写成res.status(200).send(result),效果完全一致。
修正方案
修改catch块的错误响应写法,先通过res.status()设置合适的HTTP状态码(比如资源未找到用404、服务器内部错误用500,根据实际场景选择),再用send()返回错误内容:
修正后的完整代码:
router.put("/admin/update_profile/:id", async (req, res) => { try { const id = req.params.id; const updatedData = req.body; const options = { new: true }; const result = await SomeModel.findByIdAndUpdate(id, updatedData, options); res.send(result); // 或显式写 res.status(200).send(result) } catch (err) { res.status(500).send(`Error: ${err.message}`); } });
内容的提问来源于stack exchange,提问作者sumanth.js
相关产品推荐
相关产品推荐

