Что делает "./bin/www" в Express 4.x?

Я только начал изучать Экспресс 4.0 в моем приложении Node.js, и я обнаружил, что он сгенерировал файл ./bin/www, на котором написаны только сервер приложений и настройки порта, а все остальные, такие как промежуточное ПО и маршрутизация, определен в файле ./app.js.

Однако я не уверен, что делает это ./bin/www. Я использовал Express 3.x, и я всегда определял настройки сервера и порта, а также маршрутизацию и промежуточное ПО в идентичном файле ./app.js и запускал мое приложение node с node app.js. Итак, какой смысл использовать ./bin/www? Разделяет ли это только определение сервера и порта от других?

Прямо сейчас, когда я создаю пакет с использованием экспресс-генератора, package.json включает следующее определение:

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

Однако мне интересно, следует ли запускать мое приложение с помощью node ./bin/www или npm start. Какую команду я должен запустить для запуска моего приложения?

А также, когда я развертываю свое приложение в heroku, что я должен писать в файле Procfile? Достаточно ли web: node app.js?

Ответ 1

В Express 3.0 вы обычно используете 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.0, однако, все промежуточное программное обеспечение было удалено, чтобы его можно было поддерживать и обновлять независимо от ядра Express (кроме статического промежуточного программного обеспечения), поэтому их необходимо вызывать отдельно (что вы видите в app.js).

Каталог bin/ служит местом, где вы можете определить различные сценарии запуска. www - это пример запуска приложения Express в качестве веб-сервера.

В конечном счете, у вас могут быть разные сценарии, такие как test, stop или restart и т.д. Наличие этой структуры позволяет вам иметь различные конфигурации запуска, не втискивая все в app.js

Правильный способ запустить приложение Express:

npm start

Чтобы развернуть приложение Express 4.x в Heroku, добавьте его в свой Procfile:

web: npm start

Ответ 2

Node приложения, такие как Express 3.x, используют нестандартные файлы запуска app.js, но это неправильный файл для запуска.

package.json имеет

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

который содержит командную строку запуска. Его нетривиально, потому что потенциально содержит полную командную строку, а не только путь к стартовому файлу.

Ответ 3

если вы используете экспресс-генератор, просто посмотрите на свой локальный файл, ./bin, есть файл www внутри. /bin. Поэтому, когда вы запустите node ./bin/www, node.js выполнит код в файле www. Ничего необычного.

Ответ 4

В Windows используйте эту команду:

set DEBUG = myapp: * & npm start Затем загрузите http://localhost: 3000/ в браузере, чтобы получить доступ к приложению.

Ответ 5

поместите это в Procfile web: node ./bin/www и проверьте, работает ли он с foreman start. Приложение должно быть доступно на порту 5000