1

在最近的一个学习项目中,我使用三个 Express.js 应用程序将项目分成更易于管理的部分。

一个应用程序是“主要”应用程序,即侦听连接的应用程序。另外两个安装在主应用程序的特定路线上。

调用app.disable('x-powered-by');主应用程序来禁用 X-Powered-By 标头是否足够,或者这是否需要在每个已安装的应用程序中完成?

同样,我正在考虑使用 Helmet.js 来尝试为整个项目添加一些额外的安全性。在主应用程序中包含来自 Helmet.js 的任何中间件是否足够,或者这些也需要在挂载的应用程序中定义?

我不觉得我理解某些设置和中间件如何影响已安装的 Express.js 应用程序,并且希望任何有更多经验的人提供进一步的解释。

编辑:在使用app.disable('x-powered-by')并检查来自服务器的响应之后,如果我没有在主应用程序实例和任何已安装的应用程序实例中禁用它,则会出现 X-Powered-By 标头。因此,我假设 Helmet.js 中间件的运行方式相同,但我不是 100% 确定。谁能确认这是否是预期的行为?

4

1 回答 1

2

你说的都是对的。

听起来你正在做这样的事情

var express = require('express')

var mainApp = express()
var miniAppA = express()
var miniAppB = express()

mainApp.use('/a', miniAppA)
mainApp.use('/b', miniAppB)

mainApp.listen(3000)

如您所见,这是一种不错的做事方式,但标题将在子应用程序中被覆盖。

您可以使用 Express 4 的路由器功能来缓解这种情况。您express()可以使用express.Router(). 这些是具有较少功能的 Express 应用程序(例如,它们不会以相同的方式设置标题)。

这样的事情可能会解决您的问题:

var express = require('express')

var mainApp = express()
var miniAppA = express.Router()
var miniAppB = express.Router()

mainApp.use('/a', miniAppA)
mainApp.use('/b', miniAppB)

mainApp.listen(3000)
于 2016-04-29T18:22:41.970 回答