Express.js – Helmet.js和其他中间件,以及安装的应用程序?

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

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

调用app.disable('x-powered-by');是否足够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的路由器function来缓解这一点。 您可以使用express.Router()代替使用express()创build新的小应用程序。 这些Express应用程序具有较less的function(例如,它们不以相同的方式设置标题)。

像这样的东西可以解决你的问题:

 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)