node.jsでGet/Postリクエストにレスポンスするサーバーを起動してみた
📅 September 10, 2016
•⏱️4 min read
node.js でサーバーを起動したい
GET/POSTに反応してくれるテストサーバーが欲しくて そういえば node.js で簡単にできるんじゃなかったっけ? と思い立って勉強がてら試してみました。GET/POSTメソッドを送信するとレスポンスとして そのパラメーターを表示するサーバーを node.js で起動してみました GET/POSTともに3つのパラメーターを送信できるようにしています
server.js
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
<!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 と実行% 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 でサーバーを起動することについては こちらを参考にさせていただきました
ttps://tuitui.hatenablog.com/entry/2015/11/07/003327 (現在削除されたようです)