Express(node.js)のフォームからデータを渡す方法
-
25-10-2019 - |
質問
フォームを使用してページから渡されたデータを取得し、リダイレクトされたページのデータを使用したいと思います。
私はクライアント側にこのフォームを持っています。
<form action="game" method="get">
<input type="text" name="name"/>
<input type="submit" />
</form>
そして、私は私のサーバーにこのスクリプトを持っています。
app.get('/game',function(req,res){
res.sendfile(__dirname + '/game.html');
});
PLSSが役立ちます。
解決
使用する bodyParser.urlencoded(
)ミドルウェア:
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
その後、フォーム値はreq.bodyになります:
app.post('/game', function (req, res) {
res.render('the_template', { name: req.body.name });
});
設定 { extended: true }
BodyParserは、ネストされたオブジェクトを含むフォームデータ内のJSONのようなデータを受け入れることができます。例えば { person: { name: Adam } }
従来のHTMLフォームが送信する名前のペアではなく、JavaScriptを使用して送信されます。それを必要としない場合は、拡張値をfalseに設定できます。拡張オプションを定義しない(つまり、デフォルト設定を使用する)は明らかに非推奨であり、ネストされたオプションとプレーン名値ペアが必要かどうかを決定してほしいと思われます。
Expressサーバーの一部のルートおよびJSONデータのフォームデータを解析できるようにしたい場合は、以下を使用できます。
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: <true|false> }))
urlencoded()
x-www-form-urlencodedコンテンツタイプの場合
true
- ネストされたデータ構造用false
- 名前値ペアの場合
json()
- アプリケーション/JSONコンテンツタイプ用
フォーム/マルチパートには別のボディパーサー(マルターなど)が必要であることに注意してください
他のヒント
Expressがフォームデータをうまく処理できるようにするには、あなたが確実に持っていることを確認する必要があります bodyParser
そのようなものが含まれています:
var express = require('express'),
app = express.createServer();
app.use(express.bodyParser());
//the rest of your configuration
次に、ポストハンドラーでは、フォームボディにアクセスできます。 Request.body
SOのようなプロパティ:
app.post('/game', function (req, res) {
res.render('some-file', { name: req.body.name });
});
また、テンプレートエンジンを使用する必要があります( ジェイド)応答内のフォームデータを出力することを意図している場合。
非推奨、 受け入れられた答え 正しいソリューションです
ビューで変数名にアクセスする必要がある場合は、 res.render
機能し、次のような変数を渡します。
res.render('game', {
name: req.body.name
}
そして、ジェイドでは
div!= name