Express.js中PUT与DELETE方法失效,请求返回404错误求助
Express待办应用PUT/DELETE请求404问题解决
问题描述
使用Node.js、Express.js和sqlite3开发简易待办事项应用时,GET与POST方法可正常运行,但PUT和DELETE方法无法被访问,请求返回404状态码及Cannot DELETE/PUT /todos提示。所有请求通过VSCode的Thunder工具发送,未使用HTML表单。
问题原因
后端路由定义的是URL路径参数格式:
app.put('/todos/:id', function(req, res) { ... }) app.delete('/todos/:id', function(req, res) { ... })
但实际发送的请求使用的是查询参数格式:
- DELETE请求:
http://localhost:3000/todos/?id=2 - PUT请求:
http://localhost:3000/todos/?id=2
Express会将/todos/?id=2识别为路径/todos的请求,而后端没有为/todos路径定义PUT/DELETE方法的路由,因此返回404。
解决方案
修改请求URL,将id直接嵌入路径中,匹配后端路由的路径参数格式:
- 正确的DELETE请求URL:
http://localhost:3000/todos/2 - 正确的PUT请求URL:
http://localhost:3000/todos/2
验证效果
修改请求后,后端代码中console.log(id)会打印出对应的id值(如2),数据库中的待办项会被正确更新或删除,同时返回成功响应:
- PUT成功响应示例:
{ "message": "Todo marked as completed."} - DELETE成功响应示例:
{ "message": "Todo successfully deleted."}
内容的提问来源于stack exchange,提问作者Nezumi
相关产品推荐
相关产品推荐

