Что делает "./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