在最近的学习项目中,我使用三个Express.js应用程序将项目分成更易于管理的部分。
一个应用程序是" primary"应用程序,一个倾听连接的人。其他两个安装在主应用程序的特定路径上。
在主应用上调用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%肯定。任何人都可以确认这是否是预期的行为?
答案 0 :(得分: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)