最初に
最近、Node.jsの勉強を始めました。
herokuでNode.jsを動かす際に学んだことをまとめてみました。
まず、ローカルで動かす場合
main.js
var http = require('http'); //httpモジュール呼び出し
var server = http.createServer(function (request, response) {
// リクエストを受けると以下のレスポンスを送信する
response.writeHead(200, {'Content-Type': 'text/plain'}); //レスポンスヘッダーに書き込み
response.write('Hello World\n'); // レスポンスボディに「Hello World」を書き込み
response.end(); // レスポンス送信を完了する
});
server.listen(8080); //8080番ポートで待ち受け
以下のように省略することも可能です。
var http = require('http'); //httpモジュール呼び出し
http.createServer(function (request, response) {
// リクエストを受けると以下のレスポンスを送信する
response.writeHead(200, {'Content-Type': 'text/plain'}); //レスポンスヘッダーに書き込み
response.end('Hello World\n'); // レスポンスボディに書き込み&レスポンス送信を完了する
}).listen(8080); //8080番ポートで待ち受け
ローカルで動かす場合は main.js
だけあれば動きます。(ちなみにファイル名はなんで良いです。)
コンソール上で以下のコマンドを実行した後で、ブラウザから http:localhost:8080
へアクセスします。
「Hello World」と画面に表示されれば成功です。
$ node main.js
heroku で動かしてみる
herokuで動かす場合は必要なファイルが少し増えます。
main.js
package.json
Procfile
main.js
の .listen(8080);
が .listen(process.env.PORT || 8080);
に変ります。
というのは、herokuは公開ポート番号が一定ではないらしく固定ポートが指定できないためです。
この場合、herokuで実行した際には process.env.PORT
からポート番号が指定され、ローカルで実行した際には 8080
が指定されます。
var http = require('http'); //httpモジュール呼び出し
http.createServer(function (request, response) {
// リクエストを受けると以下のレスポンスを送信する
response.writeHead(200, {'Content-Type': 'text/plain'}); //レスポンスヘッダーに書き込み
response.end('Hello World\n'); // レスポンスボディに書き込み&レスポンス送信を完了する
}).listen(process.env.PORT || 8080); //公開ポートで待ち受け
それと package.json
が必要になります。これが無いとherokuがNode.jsのシステムとして認識してくれないようです。
ファイルさえあれば中身は空でも大丈夫なようですが、一応名前とバージョンはセットしてみました。
{
"name": "testapp",
"version": "0.0.1"
}
Procfile
は自動で実行するコマンドを指定するために必要です。
これを追加しておくと勝手に node main.js
を実行してくれるみたいです。
web: node main.js
動かす場合は、上記ファイルをアップロードしてブラウザからherokuサーバーにアクセスします。
「Hello World」と画面に表示されれば成功です。
別パターン
node main.js
の実行は package.json
でも記載できるらしく、こういう構成でもいけるようです。こっちの方がファイル数は少なくて済みますね。
main.js (中身は上記パターンと同じ)
package.json
{
"name": "testapp",
"version": "0.0.1",
"scripts": {
"start": "node main.js"
}
}