是的,我已经研究了类似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:数据应为字符串,Buffer或Uint8Array
出现在后端。
答案 0 :(得分:2)
如果本机方法失败,请尝试使用节点程序包管理器安装“请求”。
尝试像这样在您的函数中实现它:var request = require('request');
您现在应该可以通过请求函数访问主体对象,如下所示:
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);
});
答案 1 :(得分:0)
在有角度的尝试中,为从后端接收的内容定义一个接口,以便在创建可观察对象时,它知道从后端获取的内容。正如您所说的那样,您已经从后端的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();
});
}
}
答案 2 :(得分:0)
似乎您需要添加XML正文解析器。
您可以尝试使用body-parser-xml。
答案 3 :(得分:0)
您需要xml-body-parser。正文解析器将仅解析json,文本等,而不解析xml。因此,在您的代码中,您可能需要做类似的事情,
var xmlparser = require('express-xml-bodyparser');
app.use(xmlparser());