这是我的HTML,带有表单。
<form [formGroup]="form" (submit)="onSave()" *ngIf="!isLoading">
<mat-form-field>
<input matInput type="text" formControlName="name" placeholder="Organization Name">
这是我component.ts文件中onSave()的代码。
onSave() {
if (this.form.invalid) {
return;
}
this.isLoading = true;
if (this.mode === "create") {
this.objsService.add(
this.form.value.name
);
} else {
this.objsService.update(
this.id,
this.form.value.name
);
}
this.form.reset();
}
这是我服务中的add()函数。
/* #region Create of CRUD */
add(name: string) {
const objData = new FormData();
objData.append("name", name);
this.http
.post<{ message: string; obj: Organization }>(
'http://localhost:3000/api/organizations',
objData
)
.subscribe(responseData => {
this.router.navigate(["/organizations"]);
});
}
/* #endregion */
最后这是我的.post到mp api中的路由器。
/* #region Create of CRUD */
router.post('', (req, res, next) => {
console.log('req.body.name: ' + req.body.name);
const obj = new objModel({
name: req.body.name
});
obj.save().then(createdObj => {
res.status(201).json({
message: capitalize(plural) + ' added successfully',
obj: {
...createdObj,
id: createdObj._id
}
});
});
});
/* #endregion */
您可以在我的api中看到,我正在运行“ console.log('req.body.name:'+ req.body.name);”,其输出为“ req.body.name:undefined” 。怎么会这样我想念什么?
在我的服务中,我最后添加了以下行。
add(name: string) {
const objData = new FormData();
objData.append('name', name);
console.log(name);
console.log(objData);
这是控制台中显示的内容。
dfgasdfg
FormData {}
__proto__: FormData
append: ƒ append()
...
values: ƒ values()
arguments: (...)
...
name: "values"
__proto__: ƒ ()
...
name: ""
名称:“”应为名称:“ dfgasdfg”。 .append语法不正确吗?
这是我的server.js文件。我确实包括了身体解析器。我实施不当了吗?
const path = require("path");
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const postsRoutes = require("./routes/posts");
const organizationsRoutes = require("./routes/organizations");
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
提前谢谢!
答案 0 :(得分:0)
我认为您在节点api中缺少body-parser中间件,这就是为什么您在req中未定义的原因。
答案 1 :(得分:0)
const bodyParser = require('body-parser');
const app = express();
app.use(express.json());
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
请尝试在server.js
根文件中使用上述快速中间件,以在req.body
对象中获取数据。
答案 2 :(得分:0)
好,我是个白痴。我需要使用以下内容。
app.use(bodyParser.urlencoded({extended: true}));
我正在使用:
app.use(bodyParser.urlencoded({extended: false}));
感谢方向!!!
P.S。
好,我拿回去。这不是永久性的解决方案。我正在运行Express 6.9.0,没有Express 4.16+有自己的解析器吗?我更改了代码,现在有了它:
app.use(express.json());
app.use(express.urlencoded());
在我使用API的方法中,看起来仍然没有用表单中的值填充req.body.name。
使用此:
console.log('req.body.name: ' + req.body.name);
我明白了:
req.body.name: undefined