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

但是,我不确定这是什么./bin/www做。./app.js文件,并启动了我的节点应用node app.js。那么使用./bin/www?它仅将服务器和端口定义与其他服务器分开吗?

现在,当我使用Express-Generator创建软件包时package.json包括以下定义:

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

但是,我想知道我是否应该使用node ./bin/www, 或者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 但是,所有中间件已被删除,以便可以独立于Core Express(静态中间件除外)维护和更新,因此需要单独调用它们(您在app.js)。

bin/目录是您可以定义各种的位置startup scripts 。这www是将Express应用程序启动为Web服务器的示例。

最终,您可以拥有不同的脚本test,,,,stop, 或者restart等等。拥有此结构使您可以具有不同的启动配置,而无需将所有内容塞进app.js

启动Express应用的正确方法是:

npm start

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

web: npm start

或者,如果您可以在您的开始脚本中使用package.json,Heroku会自动使用它,请阅读更多这里

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

来自: stackoverflow.com