libro
www.tuyano.com
初心者のための Node.jsプログラミング入門

Expressによるリクエスト処理の基本 (2/4)

作成:2013-05-21 08:22
更新:2015-08-13 13:50

■フォームの送信について

クライアントからの情報送信の基本は、やはり「フォーム」でしょう。フォームから送信される処理もExpressでは非常に簡単に行えます。これは以下の2つのポイントにまとめられるでしょう。

・POST送信はrouter.postで登録
Expressでは、公開されるアドレスと、そこにアクセスした時の処理を登録するようになっていました。今まで、routes内に用意するスクリプトでは「router.get」を使ってこの登録作業を行って来ました。が、POST送信先のアドレスは、router.postを使う必要があります。
《Router》.post( アドレス , 呼び出す関数 );

このように呼び出すことで、指定のアドレスにPOSTでアクセスできるようになります。基本的に、router.getrouter.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.getrouter.postの両方が用意されていることがわかるでしょう。

フォームを付け取り処理しているのrouter.post部分では、このようにして送られた値を取り出しています。
var str = req.body['input1'];

これで、<input type="text" name="input1">タグのvalueを変数に取り出すことができます。後は、それを使った処理を実行するだけです。わかってしまえばとても単純ですね!

※プログラムリストが表示されない場合

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;

※関連コンテンツ

「初心者のための Node.jsプログラミング入門」に戻る