web-dev-qa-db-fra.com

Express + Postman, le corps demandé est vide

Je sais que cela a été demandé à plusieurs reprises, mais je regardais autour de moi et je ne parviens toujours pas à trouver une réponse à mon problème.

Voici mon code, je m'assure d'utiliser et de configurer l'analyseur de corps avant de définir les itinéraires. J'utilise uniquement .json () avec bodyParser car, pour le moment, je teste uniquement une fonction POST, mais j'ai même essayé avec 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");
});

Voici comment j'utilise Postman pour tester cette route .  enter image description here

et voici la réponse que je reçois

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' }
{}

À ce stade, j'apprécierais vraiment toute aide. Merci.

11
seongju

Autant que je sache, vous devez utiliser 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");
});

Ensuite, essayez avec PostMan en définissant le corps avec raw json: 

{
  "test": "yay"
}
11
nakwa

Après avoir passé quelques heures, j’ai réalisé qu’il était nécessaire de changer le type Raw dans postman en JSON  enter image description here

34
David A

Dans mon cas, je le résous en ajoutant "type":"text" à l'élément urlencoded dans le fichier json de collection exporté généré par postman. Je l'observe parce que certaines de mes demandes ont été traitées avec succès. La différence est le champ type manquant dans le fichier de collecte généré par json. Ce problème arrive aussi à mon coéquipier.

avant (demande échouée): "body": { "mode": "urlencoded", "urlencoded": [ { "key": "email", "value": "{{userEmail}}" }, { "key": "password", "value": "{{userPassword}}" } ] }

après (demande réussie): "body": { "mode": "urlencoded", "urlencoded": [ { "key": "email", "value": "{{userEmail}}", "type": "text" }, { "key": "password", "value": "{{userPassword}}", "type": "text" } ] }

J'écris aussi un script d'analyse en langage javascript pour le gérer.

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);
});

Il suffit de l’exécuter dans le terminal node parser.js <json postman collection file path> et il sera affiché dans le fichier ParsedCollection.json. Après cela, importez ce fichier dans postman.

0