当前位置: 首页 > 面试题库 >

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

步建茗
2023-03-14
问题内容

我刚刚开始在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/www或启动我的应用程序npm 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 App作为Web服务器启动的示例。

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

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

npm start

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

web: npm start

或者,如果您仅可以在中使用启动脚本package.json,heroku将自动使用该启动脚本,请在此处阅读更多内容

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


 类似资料:
  • 我刚开始在Node.js应用程序中学习Express4.0,我发现它生成了文件,在该文件上只编写了应用服务器和端口设置,其他所有东西(如中间件和路由)都在文件中定义。 但是,我不确定这个是做什么的。我使用过Express3.x,并且始终在相同的文件上定义服务器和端口设置以及路由和中间件,并使用启动我的node应用程序。那么使用有什么意义呢?它是否只是将服务器和端口定义与其他分开? 现在,当我使用e

  • 问题内容: 我有一个shell脚本,其中包含以下行: 问题答案: 启用外壳程序的一种模式,其中所有执行的命令都将打印到终端。在您的情况下,它显然用于调试,这是典型的用例:在执行命令时打印每个命令,如果脚本未按预期运行,则可以帮助您可视化脚本的控制流。 禁用它。

  • 问题内容: 例如: 当不带参数调用时,上述函数将打印并返回 Python为什么要这样做?如何最好地利用这一功能? 问题答案: “ ”表达式对赋值的作用: 我们有时会在Python中看到这样的示例,以三元赋值代替条件表达式(实际上,这有助于启发该语言添加条件语句)。 如果返回,则分配值为 条件表达式的相同用例(即三元分配) 这是一个条件表达式的示例,该条件表达式可以完成相同的任务,但可能不那么神秘。

  • 在Bash脚本的头中,这两个语句之间有什么区别: >

  • 问题内容: 所以这是交易:我正在尝试在一个快速项目中使用socket.io。启动Express Js 4之后,我更新了express- generator,现在应用程序的初始功能进入了文件 (检查通过,然后 话虽这么说,让我们记住socket.io文档如何要求我们将其触发: 好的,但是我无法像推荐的那样在app.js中执行此操作。为了正常工作,这应该在./bin/www中完成。在./bin/www