在 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有什么意义呢?它只是将服务器和端口定义与其他定义分离吗?

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

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

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

另外,当我将应用程序部署到 heroku 时,我应该在 Procfile文件中写些什么? web: node app.js是否足够?

89493 次浏览

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

package.json

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

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

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等。有了这种结构,您就可以拥有不同的启动配置,而无需将所有内容都塞进 app.js

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

npm start

要将 特快4. x应用程序部署到 你好,请将以下内容添加到 Procfile:

web: npm start

或者,如果你可以只使用开始脚本在您的 package.json,heroku 将自动使用,阅读更多的 给你

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

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

如果您正在使用 Express- 生成器,只需查看您的本地文件 ./bin,在。/垃圾箱。因此,当您运行 node ./bin/www时,node.js 将在 www文件中执行代码。没什么特别的。

在 Windows 上,使用以下命令:

Set DEBUG = myapp: * & npm start 然后在浏览器中加载 http://localhost:3000/来访问应用程序。

以上所有问题都得到了很好的回答。 但是如果你只想像 Express3.* 版本那样使用 node app.js,你可以遵循以下步骤:

因为由 Express4生成器现在是一个 Node.js 模块生成的 app.js 文件不能再作为应用程序独立启动(除非您修改代码)。模块必须加载到 Node.js 文件中,并通过 Node.js 文件启动。Js 文件是。/bin/www 在这种情况下。欲了解更多信息,请访问 官方文件

在创建 Express 应用程序或启动应用程序时,bin 目录和无扩展 www 文件都不是必需的。它们只是生成器提出的建议,所以请随意修改它们以适应您的需要。

为了删除 www 目录并保持“ Express 3 way”,删除说 module.export = 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')}`);
})

接下来,在 包裹 Json文件中更改 "start": "node ./bin/www"。 因此,现在已经将 。/bin/www的功能移回 app.js。现在,开始使用 "start": "node app.js"运行 Express 应用程序。

来自 快递文件:

[ ... ]启动应用程序的实际命令是 node ./bin/www[在 Express4中] ,在 Express3中曾经是 node app.js。 由于 Express 4生成器生成的 app.js文件现在是一个 Node.js 模块,因此它不能再作为应用程序独立启动(除非您修改代码)。模块必须加载到 Node.js 文件中,并通过 Node.js 文件启动。在本例中,Node.js 文件是 ./bin/www