Express.js - Helmet.js и другое промежуточное ПО, а также смонтированные приложения?
В недавнем учебном проекте я использую три приложения 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%. Кто-нибудь может подтвердить, является ли это ожидаемым поведением?
1 ответ
Вы правы во всем, что вы сказали.
Похоже, вы делаете что-то вроде этого:
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)