“./bin/www”在 Express 4.x 中有什么作用?

2022-08-30 01:48:58

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

但是,我不确定这有什么作用。我使用过Express 3.x,并且始终在同一文件上定义服务器和端口设置以及路由和中间件,并使用.那么使用 ?它是否仅将服务器和端口定义与其他服务器和端口定义分开?./bin/www./app.jsnode app.js./bin/www

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

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

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

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


答案 1

Express 3.0 中,通常使用 (或 ) 来设置所需的中间件。您指定的那些中间件与 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

该目录用作定义各种启动脚本的位置。这是将快速应用程序作为 Web 服务器启动的示例。bin/www

最终,您可以有不同的脚本,如 、 、 或 等。具有此结构使您可以拥有不同的启动配置,而无需将所有内容都塞入.teststoprestartapp.js

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

npm start

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

web: npm start

或者,如果您只能在中使用 start 脚本,heroku 将自动使用它,请在此处阅读更多内容package.json

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

答案 2

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

package.json

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

它声明启动命令行。这并非易事,因为它可能包含完整的命令行,而不仅仅是指向初学者文件的路径。