var qs = require('querystring');このquerystringは、クエリー文字列を扱うための機能を提供します。これを利用することで、クエリー文字列から必要な値を適格に取り出せるようになるわけです。――では、スクリプトの内容を見ていきましょう。
var body='';このdataイベントは、POSTで送信されたデータを受信した際に発生します。イベントハンドラでは、送られてきたデータが引数として渡されます。こうして得られたデータを変数bodyにどんどん追加していくくことで、受信したデータが完成されていきます。
request.on('data', function (data) {
body +=data;
});
request.on('end',function(){endイベントハンドラで最初に行なっているのは、先ほどdataイベントで受け取ったデータをまとめてある変数bodyをパースする処理です。これは、querystringオブジェクトの「parse」というメソッドで行なっています。このメソッドは、引数に渡されたクエリー文字列をパースし、オブジェクトにまとめます。例えば、こんな具合です。
var post = qs.parse(body);
……略……
a=abc&x=xyz↓
{ a: "abc", x:"xyz" }この際、URLエンコードされた値なども自動的に元の文字列に復号されます。こうして得られた変数postから、必要に応じて値を取り出せばいいわけです。今回はcontent3をレンダリングするとき以下のようにしていますね。
content: ejs.render(送信された値は、post.idname、post.passで取り出せます。後は、それらをまとめてレンダリングするだけです。
routes[url_parts.pathname].content,
{
idname: post.idname,
pass: post.pass
}
)
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
var http = require('http'); var fs = require('fs'); var ejs = require('ejs'); var url = require('url'); var qs = require('querystring'); var template = fs.readFileSync('./template.ejs', 'utf8'); var content1 = fs.readFileSync('./content1.ejs', 'utf8'); var content2 = fs.readFileSync('./content2.ejs', 'utf8'); var content3 = fs.readFileSync('./content3.ejs', 'utf8'); var routes = { "/":{ "title":"Main Page", "message":"これはサンプルのページですよ。", "content":content1}, "/index":{ "title":"Main Page", "message":"これはサンプルのページですよ。", "content":content1}, "/other":{ "title":"Other Page", "message":"別のページを表示していますよ。", "content":content2}, "/post":{ "title":"Post Page", "content":content3} }; var server = http.createServer(); server.on('request', doRequest); server.listen(1234); console.log('Server running!'); // リクエストの処理 function doRequest(request, response) { var url_parts = url.parse(request.url); // route check if (routes[url_parts.pathname] == null){ response.writeHead(200, { 'Content-Type': 'text/html' }); response.end("<html><body><h1>NOT FOUND PAGE:" + request.url + "</h1></body></html>"); return; } // get if (request.method == "GET"){ var content = ejs.render( template, { title: routes[url_parts.pathname].title, content: ejs.render( routes[url_parts.pathname].content, { message: routes[url_parts.pathname].message } ) } ); response.writeHead(200, {'Content-Type': 'text/html'}); response.write(content); response.end(); return; } // post if (request.method == "POST"){ if (url_parts.pathname == "/post"){ var body=''; request.on('data', function (data) { body +=data; }); request.on('end',function(){ var post = qs.parse(body); var content = ejs.render( template, { title: routes[url_parts.pathname].title, content: ejs.render( routes[url_parts.pathname].content, { idname: post.idname, pass: post.pass } ) } ); response.writeHead(200, {'Content-Type': 'text/html'}); response.write(content); response.end(); }); } else { response.writeHead(200, {'Content-Type': 'text/plain'}); response.write("NO-POST!!"); response.end(); } } }
<< 前へ |