Express 4.x中“./bin/www”是做什么的?

我刚刚开始在Node.js应用程序中学习Express 4.0,并发现它生成了./bin/www文件,其中只有应用程序服务器和端口设置被写入,其他所有其他类似中间件和路由的文件都被定义./app.js文件。

但是,我不确定这是./bin/www 。 我已经使用了Express 3.x,并且我一直在相同的./app.js文件中定义服务器和端口设置以及路由和中间件,并且使用node app.js启动了我的节点应用程序。 那么使用./bin/www什么./bin/www ? 它是否仅将服务器和端口定义与其他人分开?

现在,当我使用express生成器创build包时, package.json包含以下定义:

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

但是,我不知道是否应该使用node ./bin/wwwnpm start启动我的应用npm start 。 我应该运行哪个命令来启动我的应用程序?

而且,当我将应用程序部署到heroku时,我应该在Procfile文件中写什么? web: node app.js够了吗?

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是一个例子,它应该看起来像最终你可以有启动脚本,如teststoprestart等。有了这个结构,你可以有不同的configuration,而不会触摸app.js

启动你的快速应用程序的正确方法是

 npm start 

要将Express 4.x应用程序部署到Heroku ,请将其添加到您的Procfile

 web: npm start 

像Express 3.x这样的节点应用程序使用非标准的启动文件app.js ,但这是错误的文件运行。

package.json

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

其中说明启动命令行。 这是不重要的,因为它可能包含完整的命令行,而不仅仅是起始文件的path。

如果您使用的是快递生成器,只需查看您的本地文件./bin ,就可以在./bin文件中findwww文件。 所以当你运行node ./bin/www ,node.js会在www文件中执行代码。 没有什么花哨。

把这个到Procfile web: node ./bin/www并检查它是否与foreman start 。 该应用程序应该在5000端口上可用