Req.body не анализируется и возвращается только undefined - PullRequest
1 голос
/ 13 июля 2020

Да, я уже рассматривал подобные вопросы вроде этого Express. js req.body undefined , но мне это не помогло, и да, я пробовал изменить код на промежуточное ПО.

Моя проблема в том, что переданный XML действителен и все в порядке (я использую Angular для Frontend), но мой бэкэнд всегда предоставляет мне неопределенную переменную 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, порт и т.д. c, что не имеет отношения к разгадке этой загадки.

Также: после вызова метода post появляется ошибка

TypeError: данные должны быть строкой, Buffer или Uint8Array

встречается в бэкэнде.

Ответы [ 4 ]

2 голосов
/ 16 июля 2020

Если собственные методы не работают, попробуйте установить 'request' с помощью диспетчера пакетов узлов.

Попробуйте реализовать его в своей функции следующим образом: 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);
  });
0 голосов
/ 20 июля 2020

Для этого вам понадобится xml -body-parser . Body-parser будет анализировать только json, текст и c, но не xml. Таким образом, в вашем коде вам может потребоваться сделать что-то вроде

var xmlparser = require('express-xml-bodyparser');

app.use(xmlparser());
0 голосов
/ 15 июля 2020

Кажется, вам нужно добавить парсер XML body.

Вы можете попробовать с body-parser- xml.

0 голосов
/ 13 июля 2020

В 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();
      });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...