Node.jsアプリでExpress 4.0について学び始めたところ、アプリケーションサーバーとポートの設定のみが記述され、ミドルウェアやルーティングのような他のすべてが./bin/www
ファイルで定義されている./app.js
ファイルを生成したことがわかりました。
ただし、この./bin/www
が何をするのかわかりません。 Express 3.xを使用し、サーバーとポートの設定、ルーティングとミドルウェアを同一の./app.js
ファイルで常に定義し、node app.js
でノードアプリを起動しました。では、./bin/www
を使用する意味は何ですか?サーバーとポートの定義を他のものから分離するだけですか?
現在、express-generatorを使用してパッケージを作成すると、package.json
に次の定義が含まれます。
"scripts": {
"start": "node ./bin/www"
}
ただし、node ./bin/www
を使用してアプリを起動する必要があるのか、npm start
を使用する必要があるのか疑問です。アプリを起動するには、どのコマンドを実行する必要がありますか?
また、アプリをherokuにデプロイするときに、Procfile
ファイルに何を書き込む必要がありますか? web: node app.js
で十分ですか?
Express 3.では、通常app.configure()
(またはapp.use()
)を使用して、必要なミドルウェアをセットアップします。指定したミドルウェアは、Express 3.0にバンドルされています。
例:
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.compress());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
Express 4.では、すべてのミドルウェアが削除されているため、コアExpressから独立して維持および更新できます(静的ミドルウェアを除く)。したがって、個別に呼び出す必要があります(app.js
)。
bin/
ディレクトリは、さまざまなスタートアップスクリプトを定義できる場所として機能します。 www
は、エクスプレスアプリをWebサーバーとして起動する例です。
最終的に、test
、stop
、またはrestart
などのような異なるスクリプトを作成できます。この構造を使用すると、すべてをapp.js
に詰め込むことなく、異なるスタートアップ構成を使用できます。
Expressアプリを開始する正しい方法は次のとおりです。
npm start
Express 4.xアプリをHerokにデプロイするには、これをProcfile
に追加します。
web: npm start
Express 3.xのようなNodeアプリは、非標準のスタートアップファイルapp.js
を使用しますが、実行するのは間違ったファイルです。
package.json
は
"scripts": {
"start": "node ./bin/www"
}
起動コマンドラインを示します。これには、スターターファイルへのパスだけでなく、完全なコマンドラインが含まれている可能性があるため、簡単ではありません。
エクスプレスジェネレーターを使用している場合は、ローカルファイル./bin
を見るだけで、。/ bin内にwww
ファイルがあります。したがって、node ./bin/www
を実行すると、node.jsはwww
ファイルでコードを実行します。派手なものは何もありません。
Windowsでは、次のコマンドを使用します。
dEBUG = myapp:*&npm startを設定し、ブラウザに http:// localhost:3000 / を読み込んでアプリにアクセスします。