1. ホーム
  2. javascript

[解決済み] Express 4.x で "./bin/www" は何をするのですか?

2022-05-06 11:24:04

質問

Node.jsのアプリでExpress 4.0を学び始めたところ、以下のようなものが生成されることがわかりました。 ./bin/www ファイルには、アプリケーションサーバとポートの設定だけが書かれており、ミドルウェアやルーティングなど、他のすべての設定は ./app.js ファイルを作成します。

しかし、この ./bin/www を実行します。私は Express 3.x を使用していますが、サーバーとポートの設定、およびルーティングとミドルウェアは常に同一の ./app.js ファイルを作成し、nodeアプリを起動する際に 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 は十分ですか?

どのように解決するのですか?

エクスプレス3.0 を使用すると、通常は app.configure() (または app.use() ) を使って、必要なミドルウェアを設定してください。指定したミドルウェアは、Express3.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());

エクスプレス4.0 しかし、すべてのミドルウェアが削除され、Expressのコアから独立して保守および更新できるようになりました(静的ミドルウェアを除く)。 app.js ).

は、その bin/ ディレクトリは、さまざまな 起動スクリプト . その www は、expressアプリをWebサーバーとして起動する例です。

最終的には、以下のような異なるスクリプトを用意することができます。 test , stop または restart などです。この構造を持つことで、起動時の設定を変えることができ、すべてを app.js .

Expressアプリの正しい起動方法です。

npm start

をデプロイするには エクスプレス4.x アプリを Heroku の場合、これを Procfile :

web: npm start

あるいは、スタートスクリプトを package.json herokuは自動的にそれを使用します。 ここで

"scripts": {
    "start": "node ./bin/www",
}