Expressによるリクエスト処理の基本 (2/4)
作成:2013-05-21 08:22
更新:2015-08-13 13:50
更新:2015-08-13 13:50
■フォームの送信について
クライアントからの情報送信の基本は、やはり「フォーム」でしょう。フォームから送信される処理もExpressでは非常に簡単に行えます。これは以下の2つのポイントにまとめられるでしょう。
・POST送信はrouter.postで登録
Expressでは、公開されるアドレスと、そこにアクセスした時の処理を登録するようになっていました。今まで、routes内に用意するスクリプトでは「router.get」を使ってこの登録作業を行って来ました。が、POST送信先のアドレスは、router.postを使う必要があります。
このように呼び出すことで、指定のアドレスにPOSTでアクセスできるようになります。基本的に、router.getをrouter.postに書きかるだけで使い方は同じなのですぐにわかりますね。
・送信フォームの値はbodyから取得する
送信されたフォームの値は、Request内の「body」というプロパティにまとめられています。これは以下のように利用します。
取り出す名前は、フォームの入力用タグのname属性に記述した名前を指定します。では、これも実際に簡単なサンプルを作ってみましょう。
下のリスト欄に必要なスクリプトをまとめておきました。今回も/helo関係のファイルを書き換えて作成します。修正したら、Node.jsを起動し、/heloにアクセスしてみましょう。入力フィールドが1つだけあるフォームが表示されます。
適当に何か書いて送信すると、送ったテキストがフォームの上に表示されます。またフィールドに書いたテキストもそのまま保持されているのがわかります。
送信するフォームには、<form method="post" action="/helo">と記述してあります。つまり、/heloでは、GETとPOSTの両方の対応が必要になります。routes/helo.jsを見ると、router.getとrouter.postの両方が用意されていることがわかるでしょう。
フォームを付け取り処理しているのrouter.post部分では、このようにして送られた値を取り出しています。
これで、<input type="text" name="input1">タグのvalueを変数に取り出すことができます。後は、それを使った処理を実行するだけです。わかってしまえばとても単純ですね!
・POST送信はrouter.postで登録
Expressでは、公開されるアドレスと、そこにアクセスした時の処理を登録するようになっていました。今まで、routes内に用意するスクリプトでは「router.get」を使ってこの登録作業を行って来ました。が、POST送信先のアドレスは、router.postを使う必要があります。
《Router》.post( アドレス , 呼び出す関数 );
このように呼び出すことで、指定のアドレスにPOSTでアクセスできるようになります。基本的に、router.getをrouter.postに書きかるだけで使い方は同じなのですぐにわかりますね。
・送信フォームの値はbodyから取得する
送信されたフォームの値は、Request内の「body」というプロパティにまとめられています。これは以下のように利用します。
var 変数 = 《Request》.body[ 取り出す名前 ];
取り出す名前は、フォームの入力用タグのname属性に記述した名前を指定します。では、これも実際に簡単なサンプルを作ってみましょう。
下のリスト欄に必要なスクリプトをまとめておきました。今回も/helo関係のファイルを書き換えて作成します。修正したら、Node.jsを起動し、/heloにアクセスしてみましょう。入力フィールドが1つだけあるフォームが表示されます。
適当に何か書いて送信すると、送ったテキストがフォームの上に表示されます。またフィールドに書いたテキストもそのまま保持されているのがわかります。
送信するフォームには、<form method="post" action="/helo">と記述してあります。つまり、/heloでは、GETとPOSTの両方の対応が必要になります。routes/helo.jsを見ると、router.getとrouter.postの両方が用意されていることがわかるでしょう。
フォームを付け取り処理しているのrouter.post部分では、このようにして送られた値を取り出しています。
var str = req.body['input1'];
これで、<input type="text" name="input1">タグのvalueを変数に取り出すことができます。後は、それを使った処理を実行するだけです。わかってしまえばとても単純ですね!
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※helo.ejs <body> <h1><%= title %></h1> <%= msg %> <form method="post" action="/form"> <input type="text" name="input1" value="<%= input %>"> <input type="submit"> </form> </body> ※helo.js var express = require('express'); var router = express.Router(); /* GET helo page. */ router.get('/', function(req, res, next) { var p1 = req.query["p1"]; var p2 = req.query.p2; var msg = p1 == undefined ? "" : p1 + "," + p2; res.render('helo', { title: 'HELO Page', msg: msg, input: '' } ); }); /* POST helo page. */ router.post('/', function(req, res, next) { var str = req.body['input1']; res.render('helo', { title: 'HELO Page', msg: "you typed: " + str, input: str } ); }); module.exports = router;
※関連コンテンツ