フォームで入力された値を取得してみる。
www/index.htmlにログイン入力フォームを用意する。こんなやつ。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<title>ログイン</title>
</head>
<body>
<form method="post" action="/post">
<p>ユーザID:<input type="text" name="userid"></p>
<p>パスワード:<input type="password" name="password"></p>
<p><input type="submit"></p>
</form>
</body>
</html>
userid、passwordをpostメソッドっで/postに送信するようになっている。
次にソース。
/// <reference path="./typings/node/node-0.11.d.ts" />
import http = require('http');
import fs = require('fs');
import url = require('url');
import querystring = require('querystring');
var server = http.createServer(requestServer);
server.listen(9999);
function requestServer(req:http.ServerRequest, res:http.ServerResponse):void {
var uri = url.parse(req.url, true); // 第2引数trueでqueryストリングを解析する(getの時使う)
if(uri.pathname == "/post") {
if(req.method.toLowerCase() === "post") { // postメソッドなら
console.log("post");
var postString = "";
// 非同期でデータを読み込むようにする。
req.on("data", data => {
postString += data;
});
// 読み込み終わった場合の処理をする。
req.on("end", ()=> {
var postData = querystring.parse(postString);
res.writeHead(200, { "Content-Type": "text/plain" });
res.write("userid:" + postData["userid"] + "\n");
res.write("password:" + postData["password"]);
res.end();
});
} if(req.method.toLowerCase() === "get") { // getメソッドなら
// url.parseの第2引数でqueryストリングを解析しているので
// uri.queryでフォーム入力した値を取得できる。
console.log("get");
res.writeHead(200, { "Content-Type":"text/plain"});
res.write("userid:" + uri.query["userid"] + "\n");
res.write("password:" + uri.query["password"]);
res.end();
} else {
res.writeHead(404, { "Content-Type": "text/plain" });
res.write("404 Not Found.");
res.end();
}
} else {
// ログインフォームのHTMLを返す。
console.log("etc");
res.writeHead(200, { "Content-Type": "text/html" });
fs.createReadStream("www/index.html")
.pipe(res);
}
}
ソースのコメントの通りなんで、説明は省く。
いや、ちょっと書いとくか。
req.onで"data"でデータを受信するように設定して、"end"で受信終了時の処理を書く。ここでは、"end"でuseridとpasswordを表示するようにしている。
getメソッドで渡す場合は、queryストリングで渡されるので、url.parseでurlを解析すればいい。
コメント