javascript - node - ¿Qué hace "./bin/www" en Express 4.x?
procfile heroku node (4)
Empecé a aprender sobre Express 4.0 en mi aplicación Node.js, y descubrí que generaba el archivo ./bin/www
, en el que solo se escriben los ajustes del servidor de aplicaciones y del puerto y de todo lo demás, como el middleware y el enrutamiento ./app.js
archivo.
Sin embargo, no estoy seguro de qué hace esto ./bin/www
. He usado Express 3.x y siempre he definido la configuración del servidor y del puerto, así como el enrutamiento y el middleware en el archivo ./app.js
idéntico, y ./app.js
mi aplicación de node app.js
con el node app.js
Entonces, ¿qué sentido tiene usar ./bin/www
? ¿Solo separa el servidor y la definición del puerto de otros?
En este momento, cuando creo el paquete usando express-generator, el package.json
incluye la siguiente definición:
"scripts": {
"start": "node ./bin/www"
}
Sin embargo, me pregunto si debería iniciar mi aplicación usando el node ./bin/www
, o npm start
. ¿Qué comando debo ejecutar para iniciar mi aplicación?
Y también, cuando despliego mi aplicación a heroku, ¿qué debo escribir en el archivo Procfile
? ¿Es web: node app.js
suficiente?
En Express 3.0 , normalmente usaría app.configure()
(o app.use()
) para configurar el middleware requerido que necesita. Esos middleware que ha especificado se incluyen junto con Express 3.0.
Ejemplo:
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());
Sin embargo, en Express 4.0 , todos los middleware se han eliminado para que puedan mantenerse y actualizarse independientemente del núcleo Express (excepto el middleware estático), por lo que deben llamarse por separado (lo que se ve en app.js
).
El directorio bin/
sirve como una ubicación donde puede definir sus varios scripts de inicio , el www
es un ejemplo de cómo debería verse. En última instancia, podría tener scripts de inicio como test
, stop
o restart
, etc. Tener esta estructura le permite tener diferentes configuraciones, sin tocar la aplicación.js.
La forma correcta de iniciar su aplicación Express es:
npm start
Para implementar una aplicación Express 4.x en Heroku , agréguela a su Procfile
:
web: npm start
Las aplicaciones de nodo como Express 3.x usan archivos de inicio no estándar app.js
, pero es el archivo incorrecto para ejecutar.
package.json
tiene
"scripts": {
"start": "node ./bin/www"
}
que indica la línea de comando de inicio. No es trivial porque potencialmente contiene una línea de comando completa, y no solo una ruta al archivo de inicio.
ponlo en Procfile web: node ./bin/www
y comprueba si funciona con foreman start
. La aplicación debe estar disponible en el puerto 5000
si está utilizando un generador de ./bin
express, simplemente mire su archivo local, ./bin
, hay un archivo www
dentro de ./bin. Entonces cuando ejecuta el node ./bin/www
, node.js ejecutará el código en el archivo www
. Nada sofisticado.