Postman发送POST请求返回404状态码 可正常GET请求如何解决
问题原因及解决方案
核心问题:接口路径不匹配
你代码中定义的POST接口路径是/api/courses,但你大概率在Postman中发送POST请求时用了和GET一致的/api/users路径,两个路径不匹配自然返回404。
从你的代码路由定义就能明显看出命名不一致的问题:
- GET获取课程列表的路由为
app.get('/api/users', ...) - 新增课程的POST路由为
app.post('/api/courses', ...)
属于典型的手误写错了路由路径。
修复方案
方案1:统一路由路径(推荐)
把POST路由的路径改成和GET同组的/api/users,或者把所有课程相关的路由都统一改成/api/courses,保持业务命名一致:
// 示例:统一用/api/courses作为课程类接口的前缀,修改两个GET路由即可 app.get('/api/courses',(req,res)=>{ res.send(courses); }); app.get('/api/courses/:id',(req,res)=>{ const course = courses.find(c=>c.id===Number(req.params.id)); if(!course) return res.status(404).send("The course with requested ID is not found"); res.send(course); });
改完之后POST请求发http://你的服务地址:3000/api/courses即可正常访问。
方案2:Postman请求路径和现有代码保持一致
如果你不想修改现有代码,直接在Postman中把POST请求的路径改成代码里定义的/api/courses即可解决404问题。
其他注意事项
- 发送POST请求时要确保请求头的
Content-Type设为application/json,否则express.json()中间件无法解析请求体,会拿不到req.body.name的值 - 404状态码的本质就是请求方法、请求路径和服务端定义的路由不匹配,遇到这类问题优先核对这两个参数
- 你现有代码里的
/api/users/:id路由如果没有匹配到资源,返回404之后没有终止函数执行,会继续执行后面的res.send(course)触发报错,建议加上return终止逻辑:
if(!course) return res.status(404).send("The course with requested ID is not found");
内容的提问来源于stack exchange,提问作者NoushadM
相关产品推荐
相关产品推荐

