У меня также есть функция промежуточного программного обеспечения, которая обеспечивает доступ только тем, кто вошел в систему. Мой вопрос: где мне разместить промежуточное программное обеспечение, чтобы сделать его максимально чистым?
Самая простая схема состоит в том, чтобы определить несколько маршрутов, которые не требуют аутентификации, затем после этого вы сделаете app.use()
для своего промежуточного программного обеспечения аутентификации, поскольку оно будет применяться ко всем маршрутам, которые вы определите после этого.
Но маршруты статей более разнообразны, например, все могут видеть статью, но только зарегистрированные пользователи могут комментировать. Поэтому мне нужно иметь промежуточное ПО внутри файла маршрутизации.
Если у вас есть маршрутизаторы, которым требуется авторизация на некоторых маршрутах, а не на других в этом маршрутизаторе, то вы создали дизайн, который не позволяет использовать самый простой способ проверки подлинности. Чтобы это работало, вам нужно добавить проверку подлинности с помощью router.use()
для любого маршрутизатора, который имеет маршруты, требующие аутентификации. Опять же, вы сначала определяете маршруты, для которых не требуется авторизация, затем выполняете router.use()
с вашим промежуточным программным обеспечением для аутентификации, затем определяете маршруты, для которых требуется авторизация.
Действительно ли мне нужна одна и та же функция (только одного промежуточного программного обеспечения) во многих файлах маршрутизации?
Это зависит от вашего дизайна. Если ваш дизайн требует, чтобы вы добавляли промежуточное программное обеспечение для аутентификации на каждый отдельный маршрутизатор, то вам потребуется в этом промежуточном программном обеспечении для каждого файла маршрутизатора. Но если вы спроектируете свои маршрутизаторы так, чтобы маршрутизаторы не представляли собой смесь аутентификационных и неавторизованных маршрутов, вы, вероятно, сможете обработать промежуточное ПО аутентификации на более высоком уровне, сначала определив неавторизованные маршрутизаторы, а затем добавьте промежуточное ПО аутентификации с помощью app.use()
затем определите ваши маршрутизаторы, которым требуется авторизация. Сложность обработки аутентификации полностью зависит от того, как вы организуете маршруты, требующие аутентификации. Если вы смешиваете их с маршрутами, которые не требуют аутентификации, то код определенно более подробный, чтобы определить autn соответствующим образом. Если вы отделите аутентификацию от маршрутов без аутентификации, вы, вероятно, сможете добавить промежуточное ПО аутентификации на более высокий уровень и, возможно, только один раз.
Это хорошее место для использования глобальной функции (для промежуточного программного обеспечения)?
Нет. Нет ничего сложного в том, чтобы добавить один оператор require()
в верхнюю часть модуля, чтобы получить промежуточное программное обеспечение, когда вам нужно, и тогда вы сможете избежать использования глобальных переменных.
Общий вопрос о том, как избежать использования require()
в верхней части многих ваших модулей, обсуждался ранее. Вот некоторые из этих ссылок:
Node.js глобальный запрос
Как правильно запрашивать файлы в другом файле
NodeJS требует, чтобы все модули были в одном файле, хорошая практика?
Как сделать модуль (например, bcrypt) доступным глобально в Express?