0

Twitter API v1.1 をクエリする Express を使用して検索エンジン アプリを構築しています。現在、bodyParser モジュールを使用してフォーム データを解析することにより、検索文字列をサーバーに送信しようとしています。コードは次のとおりです。

index.ejs

...
<form method="GET" action="/results">
    <input id="input" type="text" name="search">
    <button id="searchButton">+</button>
</form>
...

サーバー.js

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

var app = express();

var port = process.env.PORT || 8080;

app.set('view engine', 'ejs');

app.use(express.static(__dirname + "/public");

var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.get('/', function(req, res) {
    res.render('index');
});

app.get('/results', urlencodedParser, function (req, res) {
    console.log(req.body);
    res.render('results')
});

app.listen(port, function() {
    console.log('Our app is running on http://localhost:' + port);
});

示されているコードは、コンソールに{ }を返します。req.body.search にアクセスしようとすると、undefinedが返されます(明らかに)。ここでの問題は何ですか?検索文字列がログに記録されないのはなぜですか?

4

1 に答える 1

1

間違ったボディ デコーダを使用しています。フォームを送信する場合 (フォームapplication/x-www-form-urlencodedのデフォルトは ですenctype)、bodyParser.urlencoded()代わりにbodyParser.text(). 後者は、フォーム データではなく、平文のリクエスト データ用です。

さらに、ルートの代わりにルート ( )method="POST"POST使用する必要があります。リクエストに本文が含まれることはほとんどないため、ブラウザは代わりにフォーム データをクエリ文字列に変換し、それを URL 自体に追加します。これは、フォーム データが現在 ではなく にあることを意味します。に切り替えると、ブラウザーはリクエスト本文でフォーム データを送信し、フォーム データは期待どおりに送信されます。app.post('/results', ...)method="GET"GETGETreq.queryreq.bodyPOSTreq.body

于 2015-10-03T22:49:04.923 に答える