为何仅用app.get时MongoDB数据才保存?POST方法失效疑问
问题解析与解决方案
为什么用POST时访问会报错?
浏览器地址栏输入URL并回车,默认发送的是GET请求,而你定义的路由是app.post("/user"),服务器上没有匹配GET /user的路由规则,因此返回cannot Get /user。
为什么GET能实现数据保存?
你的路由逻辑里,只要请求匹配到/user路径,不管请求方法是GET还是POST,都会执行user.save()代码。换成app.get("/user")后,浏览器的GET请求刚好匹配这个路由,代码自然会执行,数据也就被保存到数据库了。但这不符合RESTful设计规范——GET请求的语义是获取资源,不应该用来执行创建/修改数据的操作,因为GET请求是幂等的,还可能被浏览器缓存,重复触发会导致重复创建数据。
正确的实现方式
如果要遵循POST用于创建资源的规范,你需要用POST请求来访问/user路由,常见的实现方式有:
- 使用Postman、Insomnia等API调试工具,手动发送POST请求到
http://localhost:3001/user - 用前端代码发送POST请求(以axios为例):
axios.post('http://localhost:3001/user') .then(() => console.log('用户保存成功')) .catch(err => console.error(err));
- 在终端用curl命令发送:
curl -X POST http://localhost:3001/user
另外,你当前的代码是硬编码用户数据,实际场景中应该从请求体获取用户输入的数据,同时要记得配置请求体解析中间件:
// 先配置JSON请求体解析中间件 app.use(express.json()); app.post("/user", async(req, res)=>{ try { const user = new User(req.body); // 从请求体获取用户数据 await user.save(); res.status(201).json({msg: '用户创建成功'}); } catch (err) { console.log(err); res.status(500).json({err: '保存失败'}); } })
内容的提问来源于stack exchange,提问作者user19069531
相关产品推荐
相关产品推荐

