nodejs node extension deploy app javascript node.js heroku express

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.