Как получить сообщение от node js, отправленное с данными формы из Angular внешнего интерфейса - PullRequest
0 голосов
/ 01 февраля 2020

Я разместил данные на angular внешнем интерфейсе как formData вот так.

postButton(name: string): Observable<any> {
    const formData = new FormData();
    formData.append('name', name);
    return this.http.post(environment.apiUrl + '/url, formData);
}

И я получаю данные на Node.js внешнем интерфейсе вот так.

const bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/api/url', (req, res, next) => {
  console.log(req.body)
  res.status(200).json({
    'message': 'OK',
  });
});

Но я получить {}, пустое значение. что не так в моем коде? С уважением.

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Насколько мне известно, если вы отправляете какой-то файл, тогда полезно использовать FormData. В другом подобном сценарии вы просто отправляете простой текст. Вы можете просто отправить нормальный json объект, и он будет работать. Вы можете попробовать это.

postButton(name: string): Observable<any> {
  return this.http.post(environment.apiUrl + '/url, { name });
}

Если вы действительно хотите использовать FormData, вам нужно установить пакет npm как:

npm install multer

и изменить app.js to:

var express = require('express');
var app = express();
var multer = require('multer');
var upload = multer();

app.use(express.json()); 
app.use(express.urlencoded({ extended: true })); 
app.use(upload.array()); 
app.use(express.static('public'));

app.post('/api/url', function (req, res) {
    console.log(req.body);
});

module.exports = app;

Теперь, что делает multer, это поддерживает multi-part отправку формы. И FromData использует это. Чтобы получить данные из тела запроса, вам нужно установить и настроить multer.

Надеюсь, это работает для вас.

0 голосов
/ 01 февраля 2020

Удалить заголовок Content-Type:

postButton(name: string): Observable<any> {
    const formData = new FormData();
    formData.append('name', name);

    const httpOptions = {
      headers: new HttpHeaders().delete('Content-Type')
    };

    return this.http.post(environment.apiUrl + '/url, formData, httpOptions);
}

Когда метод отправки XHR API отправляет объект FormData , он автоматически устанавливает заголовок типа содержимого с соответствующая граница. Когда служба Angular http переопределяет тип содержимого по умолчанию, сервер получает заголовок типа содержимого без надлежащей границы.

...