web-dev-qa-db-fra.com

Que fait "./bin/www" dans Express 4.x?

Je viens tout juste de commencer à apprendre Express 4.0 dans mon application Node.js et j'ai constaté qu'il générait un fichier ./bin/www, sur lequel seuls les paramètres du port et du serveur d'applications sont écrits, tandis que tous les autres, comme le middleware et le routage, sont définis dans le fichier ./app.js.

Cependant, je ne suis pas sûr de ce que ce ./bin/www fait. J'ai utilisé Express 3.x et j'ai toujours défini les paramètres du serveur et du port, ainsi que le routage et le middleware sur le même fichier ./app.js, et lancé mon application de nœud avec node app.js. Alors, quel est l'intérêt d'utiliser le ./bin/www? Ne sépare-t-il que la définition du serveur et du port des autres?

À l'heure actuelle, lorsque je crée le paquet en utilisant express-generator, le package.json inclut la définition suivante:

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

Cependant, je me demande si je devrais lancer mon application en utilisant node ./bin/www ou npm start. Quelle commande dois-je exécuter pour démarrer mon application?

Et aussi, lorsque je déploie mon application sur heroku, que dois-je écrire dans le fichier Procfile? Est-ce que web: node app.js est suffisant?

127
Blaszard

Dans Express 3.0 , vous utiliseriez normalement app.configure() (ou app.use()) pour configurer le middleware requis dont vous avez besoin. Les intergiciels que vous avez spécifiés sont fournis avec Express 3.0.

Exemple:

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());

Cependant, dans Express 4.0 , tous les middlewares ont été supprimés pour pouvoir être maintenus et mis à jour indépendamment du noyau Express (à l'exception du middleware statique). Ils doivent donc être appelés séparément (ce que vous voyez dans app.js).

Le répertoire bin/ sert d’emplacement où vous pouvez définir vos divers scripts de démarrage , la www est un exemple de ce à quoi il devrait ressembler. En fin de compte, vous pourriez avoir des scripts de démarrage tels que test, stop ou restart, etc. Le fait de disposer de cette structure vous permet d’avoir différentes configurations, sans toucher au app.js.

La bonne façon de démarrer votre application Express est la suivante: 

npm start

Pour déployer un Express 4.x app sur Heroku , ajoutez-le à votre Procfile

web: npm start
103
Andy

Les applications nodales telles que Express 3.x utilisent des fichiers de démarrage non standard app.js, mais le fichier à exécuter est incorrect. 

package.json a

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

qui indique la ligne de commande de démarrage. Ce n’est pas trivial, car il contient potentiellement une ligne de commande complète, et pas seulement un chemin vers le fichier de démarrage.

7
4dgaurav

si vous utilisez express-generator, regardez simplement votre fichier local, ./bin, il y a un fichier www à l'intérieur du fichier ./bin Ainsi, lorsque vous exécutez node ./bin/www, node.js exécutera le code dans le fichier www. Rien d'extraordinaire.

1
Max Ma

Sous Windows, utilisez cette commande:

définir DEBUG = myapp: * & npm start Ensuite, chargez http: // localhost: 3000/ dans votre navigateur pour accéder à l'application.

0
user11059213