hollywis's diary (はりうすブログ)

はりうすの活動日記です

nodeでクエリストリングを取得する

nodeもう少し進めてみます。

今回はhttpのgetリクエストにあるクエリを取得してみたいと思います。

クエリストリングというのは、次のようなURLにあるidarticleのことです。

http://hollywis.com?id=1&type=article

この例では次のデータが格納されています。

  • id:1

  • type:article

やってみる

var http = require('http');
var PORT = 8080;
var url = require('url')
var pages = [
        {id:'1' ,route:'',output:'HelloWorld!\n'},
        {id:'2' ,route:'foo',output:'fooのページです\n'},
        {id:'3' ,route:'var',output:'varのページです\n'},
        {id:'4' ,route:'another page',output: function(){ return 'これが'+this.route+'ページです\n'}}
    ];
http.createServer(function (request,response){
    var id = url.parse(decodeURI(request.url),true).query.id;
    if(id){
        pages.forEach(function(page){
            if(id === page.id){
                response.writeHead(200,{'Content-Type':'text/html'});
                response.end(typeof page.output === 'function' ? page.output() :page.output);
            }
        });
    }
    if(!response.finished){
        response.writeHead(404);
        response.end('ページが見つかりません!');
    }
}).listen(8080);

console.log('Server running at http://localhost'  + ':' + PORT + '/');

実行して以下にアクセスしてみます。 http://localhost:8080/?id=1

$ hotnode server.js

するとクエリストリングidが取れて別々のページにルーティングできるかと思います。