Не могу получить полезную нагрузку запроса в экспресс-узле js - PullRequest
0 голосов
/ 30 мая 2018

Это мой Код Экспресса Узла,

(function () {
    'use strict';
    var fs = require('fs');
    var cors = require('cors');
    var bodyParser = require('body-parser');
    var express = require('express'),
        app = express(),
        port = 8112;


    app.use(cors());
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    app.listen(port);


    app.route('/abc')
        .post(abc);


    function abc(req,res){
        console.dir(req.body);
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        res.sendStatus(200);
    }

})();

Но я получаю тело запроса как

{}

Но в моей вкладке сетив Chrome я вижу полезную нагрузку запроса.Обратите внимание, что OPTIONS запускается перед этим вызовом POST.

Запрос заголовков

POST /abcHTTP/1.1 Хост: localhost: 8112 Соединение:
keep-alive Content-Length: 11Pragma: no-cache Cache-Control: no-cache
Происхождение: http://localhost:4200 Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome /66.0.3359.181 Safari / 537.36
x-api-ключ: CExkxDlFC35ckfCGX6m61x76GxIYH2h2Iv8bX874
Тип содержимого: текст / обычный; кодировка = UTF-8
Принимается: / Refere1025 * Accept-Encoding: gzip, deflate, br
Accept-Language: en-US, en; q = 0,9

Запрос полезной нагрузки

{"dd": "dd"}

Ответы [ 4 ]

0 голосов
/ 30 мая 2018

Вы публикуете текстовую строку вместо JSON.Попробуйте показать нам, как вы публикуете данные (jQuery, Fetch API и т. Д.).

Просто укажите

headers: {
  'Accept': 'application/json',
  'Content-Type': 'application/json'
}

в заголовках ваших запросов (front-end).Затем анализатор тела Express должен быть в состоянии обнаружить действительный JSON и распечатать результат.Обратите внимание, что Accept не требуется, но он сообщает серверу, что клиент понимает и принимает ответ JSON.

В качестве альтернативы используйте простую библиотеку, например Easy Fetch на внешнем интерфейсе.управлять вызовами на стороне сервера без необходимости разбора ответа или настроек заголовка.

0 голосов
/ 30 мая 2018

Ваш заголовок типа контента - текстовый / простой.Пожалуйста, попробуйте заменить

app.use(bodyParser.json());

на

app.use(bodyParser.text());
0 голосов
/ 30 мая 2018

Привет @Pradhaban Nandhakumar, я думаю, что вы должны передать данные в виде данных строки.Попробуйте приведенные ниже фрагменты кода.

Вы всегда должны передавать необработанные данные.

app.post('/users', (req, res) => { res.send(req.body); });

0 голосов
/ 30 мая 2018

Вам нужно отправить: Content-Type: application/json для bodyParser.json() для работы, без него ваша полезная нагрузка JSON не будет проанализирована, поэтому вы получаете: {}

Из документов:

Объект bodyParser предоставляет различные фабрики для создания промежуточного программного обеспечения.Все промежуточные программы будут заполнять свойство req.body анализируемым телом, когда заголовок запроса Content-Type соответствует параметру типа, или пустым объектом ({}), если не было тела для анализа, Content-Type не был найден, илипроизошла ошибка.

Пример использования .fetch:

fetch('http://localhost:4200/dashboard', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({dd: 'dd'})
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...