我刚刚开始在Node.js应用程序中学习Express 4.0,我发现它生成了./bin/www文件,在该文件上仅写入了应用程序服务器和端口设置,并且在./app.js文件中定义了其他所有内容(例如中间件和路由)。
./bin/www
./app.js
但是,我不确定这./bin/www是做什么的。我使用Express 3.x,并且始终在同一./app.js文件中定义服务器和端口设置以及路由和中间件,并使用来启动我的节点应用程序node app.js。那么使用的意义./bin/www何在?它仅将服务器和端口定义与其他定义分开吗?
node app.js
现在,当我使用express-generator创建包时,其中package.json包含以下定义:
package.json
"scripts": { "start": "node ./bin/www" }
但是,我想知道是否应该使用node ./bin/www或启动我的应用程序npm start。我应该运行哪个命令来启动我的应用程序?
node ./bin/www
npm start
而且,当我将应用程序部署到heroku时,应该在Procfile文件中写些什么?是否web: node app.js足够?
Procfile
web: node app.js
在 Express 3.0中 ,通常会使用app.configure()(或app.use())设置所需的所需中间件。您指定的那些中间件与Express 3.0捆绑在一起。
app.configure()
app.use()
例:
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)。
app.js
该bin/目录是您可以定义各种 启动脚本的位置 。这www是将Express App作为Web服务器启动的示例。
bin/
www
最终,您可能具有不同的脚本,如test,stop或restart,等等。拥有这种结构可以使您拥有不同的启动配置,而无需将所有内容塞入app.js。
test
stop
restart
启动Express应用程序的正确方法是:
要将 Express 4.x 应用程序部署到 Heroku ,请将其添加到您的Procfile:
web: npm start
或者,如果您仅可以在中使用启动脚本package.json,heroku将自动使用该启动脚本,请在此处阅读更多内容
"scripts": { "start": "node ./bin/www", }