LoginSignup
6
10

More than 5 years have passed since last update.

heroku+Node.jsで「Hello World」を作る

Last updated at Posted at 2016-11-12

最初に

最近、Node.jsの勉強を始めました。
herokuでNode.jsを動かす際に学んだことをまとめてみました。

まず、ローカルで動かす場合

ファイル構成
main.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番ポートで待ち受け

以下のように省略することも可能です。

main.js
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」と画面に表示されれば成功です。

console
$ 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 が指定されます。

main.js
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のシステムとして認識してくれないようです。
ファイルさえあれば中身は空でも大丈夫なようですが、一応名前とバージョンはセットしてみました。

package.json
{
  "name": "testapp",
  "version": "0.0.1"
}

Procfile は自動で実行するコマンドを指定するために必要です。
これを追加しておくと勝手に node main.js を実行してくれるみたいです。

Procfile
web: node main.js

動かす場合は、上記ファイルをアップロードしてブラウザからherokuサーバーにアクセスします。
「Hello World」と画面に表示されれば成功です。

別パターン

node main.js の実行は package.json でも記載できるらしく、こういう構成でもいけるようです。こっちの方がファイル数は少なくて済みますね。

ファイル構成
main.js (中身は上記パターンと同じ)
package.json
package.json
{
  "name": "testapp",
  "version": "0.0.1",
  "scripts": {
    "start": "node main.js"
  }
}
6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10