Skip to content

node.jsでGet/Postリクエストにレスポンスするサーバーを起動してみた

  • tips

📅 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メソッドが送信され、そのレスポンスとして 送信したパラメーターが表示されるはずです

node-js-get-post-server

できました! 上記のように GET送信 ならURL欄を見るとクエリ付きで送信されてることを確認できて、 結果(クエリとその値)が表示されます。POSTも結果が表示されることを確認できます。

他にも試しにサクッと作った Android アプリ から GET/POST を 送信してもレスポンスにパラメーターが返ってきましたよ。 curlコマンドでも勿論OK!

ソースの理解は、基本的にはAPIドキュメントが参考になります ※node.js のバージョンごとにマニュアルがあるので注意

https://nodejs.org/ja/docs/

クエリのパースとかについてはこちらを参考にさせていただきました

req.on などイベントについてはこちらを足がかりに調べました

ちなみに req.on のイベント ‘readable’ と ‘end’ は Stream オブジェクトのイベントっぽいですね どんなイベントがあるのかは、ドキュメント見るしかなさそうですかね

参考

node.js のインストールはこちらを参考にさせていただきました

実際に node.js でサーバーを起動することについては こちらを参考にさせていただきました

ttps://tuitui.hatenablog.com/entry/2015/11/07/003327 (現在削除されたようです)  

← PrevNext →