未解析req.body,仅返回未定义的

时间:2020-07-13 13:39:52

标签: javascript node.js express

是的,我已经研究了类似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

出现在后端。

4 个答案:

答案 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());