我刚刚开始在我的 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",
}