Angular 5向Express路由传对象时返回undefined的问题
解决Angular向Express传递用户对象返回undefined的问题
嘿,我看你遇到了Angular传用户对象到Express后,后端打印出来是undefined的问题,结合你给出的代码片段,我帮你一步步排查解决:
首先补全Angular端的请求代码(你没贴全这部分,这很关键)
你已经在Angular里构造好了user对象,但要确保用HttpClient正确发送请求,重点要注意请求头和请求体的传递:
import { HttpClient, HttpHeaders } from '@angular/common/http'; // 记得在组件或service的构造函数里注入HttpClient constructor(private http: HttpClient) {} updateProfileCompany(){ const getUser = JSON.parse(localStorage.getItem('user') || '{}'); // 简化对象构造,不用逐个赋值 const user = { id: getUser.id, nama: getUser.nama, email: getUser.email, nim: getUser.nim, id_company: this.company }; // 先在Angular端打印确认对象是正常的,排除前端构造问题 console.log('要发送的用户对象:', user); // 配置请求头,告诉后端我们传的是JSON格式 const requestHeaders = new HttpHeaders({ 'Content-Type': 'application/json' }); // 发送POST请求到你的Express接口地址 this.http.post('http://localhost:3000/api/update-profile', user, { headers: requestHeaders }) .subscribe( (response) => console.log('请求发送成功', response), (error) => console.error('请求出错', error) ); }
然后检查Express端的关键配置
Express默认不会自动解析JSON格式的请求体,这是最常见的导致req.body为undefined的原因!你需要添加内置的JSON解析中间件:
const express = require('express'); const app = express(); // 必须加上这一行!解析JSON格式的请求体 app.use(express.json()); // 处理跨域(如果Angular和Express端口不同,必须加这个,否则请求会被拦截) const cors = require('cors'); app.use(cors()); // 开发环境可以直接用,生产环境建议配置具体允许的域名 // 你的接口路由 app.post('/api/update-profile', (req, res) => { // 现在req.body就能拿到Angular传过来的user对象了 console.log('收到的用户对象:', req.body); // 这里写你的业务逻辑,比如保存到数据库等 res.status(200).json({ message: '用户信息接收成功' }); }); app.listen(3000, () => console.log('Express服务运行在3000端口'));
几个容易踩的坑要注意
- 确认Angular端
console.log(user)打印的对象所有属性都有值,别出现this.company是undefined的情况 - 确保请求方法匹配:Angular用POST,Express的路由也要用
app.post,用GET的话是拿不到请求体的 - 跨域问题:如果Angular跑在4200端口,Express在3000,一定要配置CORS,否则请求会被浏览器拦截,数据根本传不到后端
按照上面的步骤调整后,Express端应该就能正常打印出你传递的用户对象了~
内容的提问来源于stack exchange,提问作者Fatih
相关产品推荐
相关产品推荐

