私はこれが何度も尋ねられたことを知っていますが、私は周りを見回しており、まだ私の問題への答えを見つけることができません。
ここに私のコードがあります。ルートを定義する前に、必ずボディパーサーを使用して構成してください。 bodyParserで.json()を使用しているのは、現在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' }
{}
この時点で、私はどんな助けでも本当に感謝します。ありがとう。
知っているあなたはボディパーサーを使用する必要があります: 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");
});
次に、本文をraw
jsonとして設定するPostManを試してください。
{
"test": "yay"
}
これを試して
// 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 }));
私の場合、"type":"text"
をurlencoded
アイテムに追加して、エクスポートされたコレクションjson
ファイルをpostmanによって生成することで解決します。私の要求のいくつかが正常に行われているため、私はそれを観察します。違いは、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
ファイルに出力されます。その後、このファイルをpostmanにインポートします。