在一个最近的学习项目中,我正在使用三个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%。谁能确认这是否是预期的行为?

最佳答案

您说的一切都是对的。

听起来您正在执行以下操作:

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)

10-07 19:25
查看更多