Nodejs) Тело почтового запроса кажется странным - PullRequest
0 голосов
/ 27 июня 2018

Я хочу отправить запрос x-www-form-urlencoded для сервера. Я даю для него значение json, например: {username: 'asd', password: '12345'}.

Угловой:

...
        let headers: HttpHeaders = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
        this._http.post('/api/authentication', form.value, {headers: headers, observe: 'response'}).subscribe((response:HttpResponse<Object>) => {
          console.log(response); // response body {'{"username":"asd","password":"12345"}' : ""}
        });
...

Так что я получаю что-то странное из бэк-энда, и я не совсем понимаю, что нужно изменить в моей реализации, чтобы сделать эту работу похожей на ввод, который он получил.

Nodejs (экспресс):

//server.js
...
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true}));
...

-

//api/.../authentication.js
...
router.post('/', (req, res) => {
    let post  = req.body;

    console.log( req.body); //same strange hash: {'{"username":"asd","password":"12345"}' : ""}

    res.status(201).json(req.body);
});
...

1 Ответ

0 голосов
/ 27 июня 2018

Заголовок Http application/x-www-form-urlencoded означает отправку x-www-form-urlencoded request на сервер, это правильно.

Однако bodyParser.json только тип запроса на анализ application/json (значение по умолчанию).

Возвращает промежуточное ПО, которое анализирует только json и просматривает только те запросы, в которых заголовок Content-Type соответствует параметру type. Введите значение по умолчанию для application / json.

Так что это не правильно.

Вы должны отправить application/json запрос. Или вы должны разобрать его как application/x-www-form-urlencoded, а затем декодировать содержимое (json).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...