MEAN STACK开发时表单提交无响应无报错,无法写入数据到MongoDB
故障修复方案
核心故障点
- Angular侧未订阅HTTP请求:Angular的HttpClient提供的所有请求方法返回的都是冷Observable,只有主动调用
subscribe()方法才会真正发起网络请求,当前代码只调用了postBook方法,没有执行订阅,所以POST请求根本没有发出。 - 后端参数获取方式错误:Express中
req.params用于获取URL路径中绑定的动态参数,POST请求提交的请求体数据需要通过req.body获取,当前用req.params拿所有字段都是undefined,就算请求发至后端也无法正确生成入库数据。 - 额外注意:Express需要提前配置JSON解析中间件,否则
req.body会返回undefined。
各部分修复代码
1. 修复addBook组件ts代码
onSubmit(f){ //console.log(f.value) ; this.apiService.postBook(f.value).subscribe({ next: (res) => { console.log('提交成功', res); // 可在此处添加提交成功逻辑:比如重置表单、跳转列表页 f.resetForm(); }, error: (err) => { console.error('提交出错', err); } }); }
2. 修复后端路由代码
//POST ONE BOOK booksRoute.route('/post').post((req,res,next)=>{ var x = { name : req.body.name, genre : req.body.genre, author : req.body.author, rating : req.body.rating, price : req.body.price } console.log(x) ; BookModel(x).save((err,data)=>{ if (err){ console.log(err); return res.status(500).send(err); } else res.send(data) ; }) ; })
3. 确认Express入口文件(app.js/server.js)已配置解析中间件
const express = require('express'); const app = express(); // 必须配置以下两行才能解析POST请求的JSON请求体 app.use(express.json()); app.use(express.urlencoded({ extended: true }));
内容的提问来源于stack exchange,提问作者Mohamed Ali Mani
相关产品推荐
相关产品推荐

