使用Express/Node.js时Post请求无法抵达端点问题求助
问题:Express POST请求报错Cannot GET /post,GET请求正常
我编写了一段向服务器发送POST请求的简单代码,但访问端点时显示【Cannot GET /post】。不过发送GET请求时,服务器能正常返回消息"Ok",恳请帮忙找出我遗漏的配置。
我的代码
import express from 'express' import bodyParser from 'body-parser' const app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.post('/post', (req, res) => { console.log('Got body:', req.body); res.sendStatus(200); }); app.listen(8080, () => console.log(`Started server at http://localhost:8080!`));
package.json文件截图

访问端点时收到的报错信息

解决方案
1. 核心问题:请求方法不匹配
报错的直接原因是你用GET方式访问了仅配置POST的端点。比如直接在浏览器地址栏输入http://localhost:8080/post,浏览器默认发送GET请求,但你的代码只定义了app.post('/post')路由,所以服务器返回"Cannot GET /post"。
测试时必须确保用POST方法发送请求:
- 用Postman、curl等工具选择POST方法测试
- curl命令示例:
curl -X POST -d "key=value" http://localhost:8080/post
2. 简化中间件配置(可选但推荐)
Express 4.16.0+已经内置了body-parser的urlencoded和json解析功能,不需要额外安装body-parser包。可以把代码中的body-parser替换为:
const app = express(); // 替换body-parser,处理表单格式请求体 app.use(express.urlencoded({ extended: true })); // 新增:处理JSON格式请求体(如果需要接收JSON数据) app.use(express.json());
之后可以卸载body-parser包:
npm uninstall body-parser
3. 可选:添加GET路由(如果需要支持GET访问)
如果希望GET请求访问/post也能得到响应,可以补充GET路由:
app.get('/post', (req, res) => { res.send('Ok'); });
内容的提问来源于stack exchange,提问作者Muhammad Junaid
相关产品推荐
相关产品推荐

