Recién comencé a aprender sobre Express 4.0 en mi aplicación Node.js, y descubrí que generaba un ./bin/www
archivo, en el que solo se escriben el servidor de aplicaciones y la configuración del puerto y todo lo demás, como middleware y enrutamiento, se define en el ./app.js
archivo.
Sin embargo, no estoy seguro de lo que esto ./bin/www
hace. Utilicé Express 3.xy siempre definí la configuración del servidor y del puerto, así como el enrutamiento y el middleware en el mismo ./app.js
archivo, e inicié mi aplicación de nodo con node app.js
. Entonces, ¿cuál es el punto de usar el ./bin/www
? ¿Solo separa el servidor y la definición de puerto de los demás?
En este momento, cuando creo el paquete usando express-generator, package.json
incluye la siguiente definición:
"scripts": {
"start": "node ./bin/www"
}
Sin embargo, me pregunto si debería iniciar mi aplicación usando node ./bin/www
, o npm start
. ¿Qué comando debo ejecutar para iniciar mi aplicación?
Y también, cuando implemente mi aplicación en heroku, ¿qué debo escribir en el Procfile
archivo? Es web: node app.js
suficiente?
fuente
Respuestas:
En Express 3.0 , normalmente usaría
app.configure()
(oapp.use()
) para configurar el middleware requerido que necesita. Los middleware que especificó se incluyen junto con Express 3.0.Ejemplo:
Sin embargo, en Express 4.0 , todos los middleware se han eliminado para que puedan mantenerse y actualizarse independientemente del Express central (excepto el middleware estático), por lo que deben llamarse por separado (lo que ve en
app.js
).El
bin/
directorio sirve como una ubicación donde puede definir sus diversos scripts de inicio . Estewww
es un ejemplo para iniciar la aplicación express como servidor web.En última instancia, podría tener diferentes guiones como
test
,stop
orestart
, etc Tener esta estructura le permite tener diferentes configuraciones de inicio, sin abarrotar todo enapp.js
.La forma correcta de iniciar su aplicación Express es:
Para implementar una aplicación Express 4.x en Heroku , agregue esto a su
Procfile
:O si solo puede usar el script de inicio en su
package.json
, heroku lo usará automáticamente, lea más aquífuente
www
. Sin embargo, no estoy seguro de por qué se llama así, ¿tal vez por la World Wide Web?Las aplicaciones de nodo como Express 3.x usan archivos de inicio no estándar
app.js
, pero es un archivo incorrecto para ejecutar.package.json
tieneque establece 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.
fuente
si está utilizando express-generator, solo mire su archivo local
./bin
, hay unwww
archivo dentro de ./bin. Entonces, cuando ejecutanode ./bin/www
, node.js ejecutará el código en elwww
archivo. Nada sofisticado.fuente
En Windows, use este comando:
fuente
Todo lo anterior ha respondido bien. Pero en caso de que quiera usar
node app.js
solo versiones Express 3. * Puedes seguir a continuación:Debido a que el archivo app.js generado por el generador Express 4 ahora es un módulo Node.js , ya no se puede iniciar de forma independiente como una aplicación (a menos que modifique el código). El módulo debe cargarse en un archivo Node.js e iniciarse mediante el archivo Node.js. El archivo Node.js es ./bin/www en este caso. Para más información, visite la documentación oficial .
Ni el directorio bin ni el archivo www sin extensión son obligatorios para crear una aplicación Express o iniciar la aplicación. Son solo sugerencias hechas por el generador, así que siéntase libre de modificarlas para satisfacer sus necesidades.
Para deshacerse del directorio www y mantener las cosas como "Express 3 way", elimine la línea que dice module.exports = app; al final del archivo app.js, luego pegue el siguiente código en su lugar:
Luego, cambie
"start": "node ./bin/www"
el archivo package.json . Desde entonces, ha movido la funcionalidad de ./bin/www de nuevo a app.js. Ahora, comience a usar"start": "node app.js"
para ejecutar su aplicación express.fuente
pon esto en Procfile
web: node ./bin/www
y verifica si funcionaforeman start
. La aplicación debería estar disponible en el puerto 5000fuente