javascript - "./bin/www"在 Express 4.x 中有什么作用?

标签 javascript node.js heroku express

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

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

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

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

但是,我想知道是否应该使用 node ./bin/wwwnpm 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 中,所有的中间件都已被移除,以便它们可以独立于核心 Express 进行维护和更新(静态中间件除外),因此它们需要单独调用(你请参阅 app.js)。

bin/ 目录是您可以定义各种启动脚本 的位置。 www 是将 express 应用程序作为 Web 服务器启动的示例。

最终,您可以有不同的脚本,如 teststoprestart 等。拥有这种结构可以让您有不同的启动配置,无需将所有内容都塞进 app.js.

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

npm start

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

web: npm start

或者,如果你可以在 package.json 中使用启动脚本,heroku 会自动使用它,阅读更多 here

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

关于javascript - "./bin/www"在 Express 4.x 中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23169941/

相关文章:

javascript - 如何将递归回调函数转换为异步等待格式

javascript - 将 jQuery 选择保存到变量的行为不同

javascript - 单击链接后将全屏 api 保持在全屏状态

postgresql - "FATAL: no pg_hba.conf entry for host"但我可以通过 pgAdmin 连接

php - 我需要安装 PHP 和 composer 才能在 Heroku 上托管应用程序吗?

javascript - 如何连续显示元素,隐藏它们,然后在 jQuery 中重复

node.js - Electron 应用程序有多个后台服务正在运行并且退出时不会停止

AngularJS GULP BrowerSync 错误 : ENAMETOOLONG, 名称太长

javascript - nodejs post方法中的第二个参数是什么

python - Gunicorn 通过导致 404 导致 Flask 的 add_url_rule