Angular4调用NodeExpressJS新增员工时id属性为NaN且未写入JSON问题
解决Angular4表单提交时newEmployee.id为NaN且无法写入JSON的问题
兄弟,我看你遇到的问题是在新增员工表单的onSubmit函数里,没法把id属性正确写入newEmployee对象,还出现了NaN的错误。这大概率是因为id的取值或转换出了问题,我给你分析下常见原因和解决办法:
先搞清楚NaN的根源
NaN(Not a Number)说明你给id赋的值没法被解析成有效的数字,常见场景有这几种:
- 你从表单控件取到的
id是字符串,直接赋值没转成数字 - 试图自动生成
id时,获取现有员工的最大id失败(比如员工列表为空、取到的值是undefined) newEmployee初始化时没给id留属性,赋值时拿到了undefined,转数字就成了NaN
针对性解决办法
场景1:手动输入员工id
如果你的表单里有让用户输入id的字段,那要把表单返回的字符串值转换成数字,还要处理用户没输入的情况:
onSubmit(form: NgForm) { // 先拷贝表单值到newEmployee this.newEmployee = { ...form.value }; // 把字符串id转成数字,第二个参数10是十进制,防止意外情况 const inputId = form.value.id; this.newEmployee.id = inputId ? parseInt(inputId, 10) : 0; // 没输入的话给默认值0,或者根据需求调整 // 现在再提交就不会有NaN了 console.log(this.newEmployee.id); // 正常输出数字 // 调用服务提交到Node/Express服务器 this.employeeService.addEmployee(this.newEmployee).subscribe(...); }
场景2:自动生成员工id(更推荐,避免用户输入重复)
如果不想让用户手动输id,最好的方式是基于现有员工的最大id加1来生成新id,这样还能避免重复:
onSubmit(form: NgForm) { this.newEmployee = { ...form.value }; // 先获取现有员工列表,计算最大id this.employeeService.getEmployees().subscribe( (employees: any[]) => { // 处理员工列表为空的情况,默认maxId为0 const maxId = employees.length > 0 ? Math.max(...employees.map(emp => emp.id)) : 0; this.newEmployee.id = maxId + 1; // 新id就是最大id加1 // 提交到服务器 this.employeeService.addEmployee(this.newEmployee).subscribe( res => { console.log("员工添加成功!"); form.reset(); // 重置表单 }, err => console.error("提交失败:", err) ); }, err => console.error("获取员工列表失败:", err) ); }
额外检查点
- 确认你的
newEmployee对象初始化时,有没有预留id属性(比如let newEmployee: Employee = { id: 0, name: '', ... };),避免赋值时属性不存在 - 检查Node/Express服务器的接口,是否允许接收前端传入的
id字段(有些后端会自动生成id,比如MongoDB的_id,这时候前端传的id可能会被忽略,但你的问题是前端没法写入,所以主要还是前端的问题)
内容的提问来源于stack exchange,提问作者Rajendra Sahu
相关产品推荐
相关产品推荐

