开发者问题收集

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