Req.body 未被解析,仅返回未定义
2020-07-13
1086
是的,我已经看过类似的问题,例如 Express.js req.body undefined ,但是它对我没有帮助,是的,我已经尝试将代码更改为中间件。
我的问题是传递的 XML 是有效的并且一切正常(我正在使用 Angular 作为前端),但我的后端总是给我一个未定义的变量 req.body......我试图打印出
console.log(req)
并且它总是将主体显示为一个空对象。
我有以下代码:
var testvar = req.body;
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
req.write(postData);
req.end();
console.log(testvar);
代码是在
app.post
中实现的,它像往常一样自然包含
req, res
。选项包含 IP、端口等,这些与解决这个谜题无关。
另外:一旦调用 post 方法,后端就会出现错误
TypeError: data should be a string, Buffer or Uint8Array
。
3个回答
如果本机方法失败,请尝试使用节点包管理器安装“request”。
尝试在您的函数中像这样实现它:
var request = require('request');
您现在应该能够通过请求函数访问 body 对象,如下所示:
request(options, function (error, request) {
if (error) throw new Error(error);
console.log(request.body);
req.write(request.body);
req.end();
res.status(200).send(req.body);
});
crispyzlata
2020-07-16
在 angular 中尝试定义一个接口来接收来自后端的数据,这样当您创建可观察对象时,它就知道它从后端获取了什么。正如您所说,您已经在后端解析了来自 XML 的信息。这应该有效。 例如:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { ErrorprocessorService } from './errorprocessor.service';
import { Observable, Subject } from 'rxjs';
import { map } from 'rxjs/operators';
interface JWTResponse {
success: boolean;
message: string;
user: any;
}
@Injectable({
providedIn: 'root'
})
export class AuthService {
constructor(private http: HttpClient, private errorProcessor: ErrorprocessorService) { }
checkJWTtoken() {
this.http.get<JWTResponse>('http://localhost:3000/auth/checkToken')
.subscribe(res => {
console.log('JWT Token Valid: ', res);
this.sendUsername(res.user.username);
}, err => {
console.log('JWT Token Invalid: ', err);
this.destroyUserCedentials();
});
}
}
Akshay Sethia
2020-07-13
看来您需要添加一个 XML 主体解析器。
您可以尝试使用 body-parser-xml 。
Daniele Ricci
2020-07-15