Express + Postman, req.body пуст

Я знаю, что это было задано несколько раз, но я искал вокруг и все еще не могу найти ответ на мою проблему.

Вот мой код, я должен использовать и настраивать парсер для определения маршрутов. Я использую только .json() с bodyParser, потому что сейчас я тестирую только функцию POST, но я даже пытался использовать app.use(bodyParser.urlencoded({extended: true));

var express = require('express'),
    bodyParser = require('body-parser'),
    app = express();

app.use(bodyParser.json());
app.set('port', (process.env.PORT || 5000));

app.listen(app.get('port'), function() {
    console.log("Node app is running at localhost:" + app.get('port'))
});

app.post('/itemSearch', function(req, res) {
    //var Keywords = req.body.Keywords;
    console.log("Yoooooo");
    console.log(req.headers);
    console.log(req.body);
    res.status(200).send("yay");
});

Вот как я использую Postman для проверки этого маршрута. введите описание изображения здесь

и вот ответ, который я получаю

Node app is running at localhost:5000
Yoooooo
{ host: 'localhost:5000',
  connection: 'keep-alive',
  'content-length': '146',
  'cache-control': 'no-cache',
  origin: 'chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop',
  'content-type': 'multipart/form-data; boundary=----WebKitFormBoundarynJtRFnukjOQDaHgU',
  'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
  'postman-token': '984b101b-7780-5d6e-5a24-ad2c89b492fc',
  accept: '*/*',
  'accept-encoding': 'gzip, deflate',
  'accept-language': 'en-GB,en-US;q=0.8,en;q=0.6' }
{}

В этот момент я был бы очень признателен за любую помощь. Спасибо.

Ответ 1

AFAIK вам нужно использовать Body-Parser: https://github.com/expressjs/body-parser

bodyParser = require('body-parser').json();
app.post('/itemSearch', bodyParser, function(req, res) {
  //var Keywords = req.body.Keywords;
  console.log("Yoooooo");
  console.log(req.headers);
  console.log(req.body);
  res.status(200).send("yay");
});

Затем попробуйте с PostMan установить тело как raw json:

{
  "test": "yay"
}

Ответ 2

Проведя несколько часов, я понял, что нужно изменить тип Raw в почтальоне на JSON ввести описание изображения здесь

Ответ 3

В моем случае я решаю это путем добавления "type":"text" к элементу urlencoded в экспортированном json файле коллекции, созданном почтальоном. Я наблюдаю это потому, что некоторые мои просьбы успешно выполнены. Разница в том, что в файле коллекции почтальона, сгенерированном json, отсутствует поле type. Эта проблема также случается с моим товарищем по команде.

before (неудачный запрос): "body": { "mode": "urlencoded", "urlencoded": [ { "key": "email", "value": "{{userEmail}}" }, { "key": "password", "value": "{{userPassword}}" } ] }

after (успешный запрос): "body": { "mode": "urlencoded", "urlencoded": [ { "key": "email", "value": "{{userEmail}}", "type": "text" }, { "key": "password", "value": "{{userPassword}}", "type": "text" } ] }

Я также пишу скрипт парсера на языке JavaScript, чтобы справиться с этим.

const fs = require('fs');
let object = require(process.argv[2]);

function parse(obj) {
    if(typeof obj === 'string') return;
    for(let key in obj) {
        if(obj.hasOwnProperty(key)) {
            if(key === 'urlencoded') {
                let body = obj[key];
                for(let i = 0;i < body.length;i++) {
                    body[i].type = "text";
                }
            }
            else parse(obj[key]);
        }
    }
}

parse(object);
fs.writeFile('ParsedCollection.json', JSON.stringify(object, null, '\t'), function(err){
    //console.log(err);
});

Просто запустите его в терминальном node parser.js <json postman collection file path> и он будет ParsedCollection.json файл ParsedCollection.json. После этого импортируйте этот файл в почтальон.

Ответ 4

Попробуй это

 // create application/json parser
    app.use(bodyParser.json());
    // parse various different custom JSON types as JSON
    app.use(bodyParser.json({ type: 'application/*+json' }));
    // parse some custom thing into a Buffer
    app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }));
    // parse an HTML body into a string
    app.use(bodyParser.text({ type: 'text/html' }));
    // parse an text body into a string
    app.use(bodyParser.text({ type: 'text/plain' }));
    // create application/x-www-form-urlencoded parser
    app.use(bodyParser.urlencoded({ extended: false }));