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 .
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.
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"
}
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.