“./bin/www”在Express 4.x中做了什么?

时间:2014-04-19 12:15:12

标签: javascript node.js heroku express

我刚开始在我的Node.js应用程序中了解Express 4.0,我发现它生成了./bin/www文件,其中只编写了应用程序服务器和端口设置,其他所有内容和路由设置都是在./app.js文件中定义。

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

现在,当我使用express-generator创建包时,package.json包含以下定义:

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

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

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

6 个答案:

答案 0 :(得分:109)

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是将Express应用程序作为Web服务器启动的示例。

最终,您可以使用不同的脚本,例如teststoprestart等。拥有此结构可让您拥有不同的启动配置,而不会将所有内容都填入{{1 }}

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

app.js

要将 Express 4.x 应用部署到 Heroku ,请将其添加到您的npm start

Procfile

答案 1 :(得分:7)

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

package.json

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

表示启动命令行。这非常简单,因为它可能包含完整的命令行,而不仅仅是启动文件的路径。

答案 2 :(得分:2)

以上所有答案都很好。 但是,如果只想像Express 3. *版本一样使用node app.js的话。您可以按照以下步骤操作:

由于由 Express 4生成器生成的app.js文件现在是Node.js模块,因此无法再作为应用程序独立启动(除非您修改代码)。该模块必须加载到Node.js文件中,并通过Node.js文件启动。在这种情况下,Node.js文件是./bin/www。有关更多信息,请访问the official documentation

bin目录或无扩展名的www文件对于创建Express应用程序或启动应用程序都不是必需的。这些只是生成器提出的建议,请随时对其进行修改以满足您的需求。

要摆脱www目录并使东西保持“ Express 3方式”,请删除显示为module.exports = app;的行。在app.js文件的末尾,然后将以下代码粘贴到其位置:

app.set('port', process.env.PORT || 3000)

app.listen(app.get('port'), () => {
  console.log(`Express server listening on port ${app.get('port')}`);
})

接下来,在 package.json 文件中更改"start": "node ./bin/www"。 从那时起,您现在已将 ./ bin / www 的功能移回了app.js。现在,开始使用"start": "node app.js"运行快速应用程序。

答案 3 :(得分:1)

如果您使用快速生成器,只需查看本地文件./bin,。/ bin中有www个文件。因此,当您运行node ./bin/www时,node.js将执行www文件中的代码。没什么好看的。

答案 4 :(得分:0)

在Windows上,使用以下命令:

  

设置DEBUG = myapp:*和npm开始   然后在浏览器中加载http://localhost:3000/来访问该应用。

答案 5 :(得分:-1)

把它放到Procfile web: node ./bin/www 并检查它是否适用于foreman start。 该应用程序应该在端口5000

上可用