<広告>
node.js でサーバーを起動したい
GET/POSTに反応してくれるテストサーバーが欲しくて
そういえば node.js で簡単にできるんじゃなかったっけ?
と思い立って勉強がてら試してみました。
GET/POSTメソッドを送信するとレスポンスとして
そのパラメーターを表示するサーバーを node.js で起動してみました
GET/POSTともに3つのパラメーターを送信できるようにしています
server.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
var http = require('http'); var fs = require('fs'); var querystring = require('querystring'); var url = require('url'); var server = http.createServer(function(req, res) { // '/'にアクセス index.html(テスト用のGET/POSTフォーム)を表示 if (req.url === '/' && req.method === 'GET') { // index.htmlを読み込む fs.readFile(__dirname + '/index.html', { encoding: 'utf8' }, function(err, html) { // ファイルの読み込みに失敗したらエラーのレスポンスを返す if (err) { res.statusCode = 500; res.end('Error!'); } // ファイルの読み込みが成功したらHTMLを返す else { res.setHeader('Content-Type', 'text/html'); res.end(html); } }); } // '/postPage'にアクセス かつ POSTリクエストだったら else if (req.url === '/postPage' && req.method === 'POST') { var data = ''; //readableイベントが発火したらデータにリクエストボディのデータを追加 req.on('readable', function(chunk) { data += req.read(); }); //リクエストボディをすべて読み込んだらendイベントが発火する。 req.on('end', function() { //パースする querystring.parse(data); res.end(data); }); } // '/getPage'にアクセス かつ GETリクエストだったら else if (req.url.indexOf('/getPage?') == 0 && req.method === 'GET') { var str = ''; // パースする var data = url.parse(req.url,true).query; // 連想配列から取り出す for (var key in data) { str += key + '=' + data[key] + '&'; } res.end(str); } else { res.statusCode = 404; res.end('NotFound'); } }); // localhostの8000番ポートでサーバーを起動する server.listen(8000); |
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>GET/POSTのテスト</title> </head> <body> <form method="GET" action="/getPage"> <input type="text" name="get0"> <input type="text" name="get1"> <input type="text" name="get2"> <input type="submit" value="GET送信"> </form> <form method="POST" action="/postPage"> <input type="text" name="post0"> <input type="text" name="post1"> <input type="text" name="post2"> <input type="submit" value="POST送信"> </form> </body> </html> |
簡単な説明
server.js と index.html を同じディレクトリに置いて
node server.js と実行
1 2 3 4 |
% ls index.html server.js % node server.js // 実行中 |
http://localhost:8000/ とか http://127.0.0.1:8000 に
アクセスすれば index.html を読み込んでフォームが表示されるはずです
フォームに値を入力して GET送信 or POST送信 ボタンを押せば
GET/POSTメソッドが送信され、そのレスポンスとして
送信したパラメーターが表示されるはずです
できました!
上記のように GET送信 ならURL欄を見るとクエリ付きで送信されてることを確認できて、
結果(クエリとその値)が表示されます。POSTも結果が表示されることを確認できます。
他にも試しにサクッと作った Android アプリ から GET/POST を
送信してもレスポンスにパラメーターが返ってきましたよ。
curlコマンドでも勿論OK!
ソースの理解は、基本的にはAPIドキュメントが参考になります
※node.js のバージョンごとにマニュアルがあるので注意
<広告>
クエリのパースとかについてはこちらを参考にさせていただきました
req.on などイベントについてはこちらを足がかりに調べました
ちなみに req.on のイベント ‘readable’ と ‘end’ は Stream オブジェクトのイベントっぽいですね
どんなイベントがあるのかは、ドキュメント見るしかなさそうですかね
参考
node.js のインストールはこちらを参考にさせていただきました
実際に node.js でサーバーを起動することについては
こちらを参考にさせていただきました
<広告>