检索POST查询参数



我在执行POST请求时发送查询参数。我尝试过使用req.query.mmCode,它在服务器端不断返回undefined。

app.js

app.post("/api/risk/:id", (req, res) => {
// Create a new note and pass the req.body to the entry
var mmCode = req.query.mmCode;
console.log(mmCode);

服务.ts

addRisk(params: HttpParams, id: string) {
console.log(params);
this.http
.post("http://localhost:3000/api/risk/" + id, { params })
.subscribe(responseData => {
console.log(responseData);
// this.vehicles.push(vehicle);
// this.vehicleUpdate.next([...this.vehicles]);
});
}

添加组件.ts

onAddVehicle(form: NgForm) {
this.params = null;
if (form.invalid) {
return;
}
this.isLoading = true;

const vehicle: Vehicle = { id: null, mmCode: form.value.mmCode, vehicleType: form.value.vehicleType, 
make: form.value.make, model: form.value.model, regYear: form.value.regYear};

this.http.post<{ message: string, vehicle: Vehicle }>("http://localhost:3000/api/vehicles", vehicle)
.subscribe((responseData) =>{
this.addVehicle = responseData;
this.addMMCode = this.addVehicle.vehicle.mmCode;
this.vehicleID = this.addVehicle.vehicle._id;
this.params = new HttpParams()
.set('mmCode', this.addMMCode);
console.log('CODE ' + this.addMMCode);
this.vehicleService.addRisk(this.params, this.vehicleID);

this.isLoading = false;
form.resetForm();

}

无法检索POST查询参数的原因是没有任何参数。HttpClientpost()大致定义如下:post(url, requestBody, options)。查询参数应作为options而不是body传递。因此,在您的示例(service.ts(中:

addRisk(params: HttpParams, id: string) {
this.http
.post("http://localhost:3000/api/risk/" + id, { params })
.subscribe(responseData => {
console.log(responseData);
});
}

应该是

addRisk(params: HttpParams, id: string) {
this.http
.post("http://localhost:3000/api/risk/" + id, null, { params })
.subscribe(responseData => {
console.log(responseData);
});
}

HttpClient的文档:参考

此代码:

this.addMMCode = this.addVehicle.vehicle.mmCode;
this.vehicleID = this.addVehicle.vehicle._id;
this.params = new HttpParams()
.set('mmCode', this.addMMCode);
console.log('CODE ' + this.addMMCode);
this.vehicleService.addRisk(this.params, this.vehicleID);

不遵循单一责任原则,它试图在回应后做其他事情。如果这是您想要的,那么应该将其移动到另一个函数。我们不知道这个.vehicleService.addRisk是做什么的,所以我们甚至不能确定它是否合法。

但正如前面的答案所示,除了发送查询parm之外,没有其他方法(我知道(可以获得查询parm。帖子不会发回查询parm,而是发回正文数据。这就是为什么我更喜欢定义良好的对象来发送主体数据(可以包含带有查询parms的路由信息(。如果你的后台被训练为总是返回那个字段,那么你就做好了准备。

最新更新