Промежуточное ПО для файлов - PullRequest
0 голосов
/ 12 мая 2018

Я делаю новую чистую структуру приложения nodejs (express).

У меня есть папка моделей со схемами mongoose, папка маршрутов для маршрутизации, папка контроллеров (со всей логикой) и основной файл server.js со следующими данными:

require('./models/notifications');
require('./models/articles');

const
    notificationRouter = require('./routes/notifications'),
    articleRouter = require('./routes/articles');

app.use('/notifications', notificationRouter);
app.use('/articles', articleRouter);

Файл маршруты / уведомления.js

const
    router = require('express').Router(),
    controller = require('../controllers/notifications');

router.route('/')
      .get(controller.getAll)
      .post(controller.create);

router.route('/:id')
      .put(controller.seen);

module.exports = router;

Файл маршруты / статьи.js

const
    router = require('express').Router(),
    controller = require('../controllers/articles');

router.route('/:articleId/comments')
      .post(controller.insertComment);

module.exports = router;

У меня также есть функция промежуточного программного обеспечения, которая обеспечивает доступ только для пользователей, вошедших в систему. Мой вопрос: где мне разместить промежуточное программное обеспечение, чтобы сделать его максимально чистым?Мои опасения:

  • Промежуточное программное обеспечение требуется в разных местах
    • Все маршруты для уведомлений только для зарегистрированных пользователей, поэтому они могут быть в server.js в app.use () function
    • Но маршруты статей имеют большее разнообразие, например, каждый может видеть статью, но только зарегистрированные пользователи могут комментировать ее.Поэтому у меня должно быть промежуточное программное обеспечение внутри файла маршрутизации.
  • Это хорошее место для использования глобальной функции (для промежуточного программного обеспечения)?
  • Действительно ли мне нужна такая же функция require(только одного промежуточного программного обеспечения) во многих файлах маршрутизации?

Спасибо за все и любые советы или критику моего чистого решения.

1 Ответ

0 голосов
/ 12 мая 2018

У меня также есть функция промежуточного программного обеспечения, которая обеспечивает доступ только тем, кто вошел в систему. Мой вопрос: где мне разместить промежуточное программное обеспечение, чтобы сделать его максимально чистым?

Самая простая схема состоит в том, чтобы определить несколько маршрутов, которые не требуют аутентификации, затем после этого вы сделаете app.use() для своего промежуточного программного обеспечения аутентификации, поскольку оно будет применяться ко всем маршрутам, которые вы определите после этого.

Но маршруты статей более разнообразны, например, все могут видеть статью, но только зарегистрированные пользователи могут комментировать. Поэтому мне нужно иметь промежуточное ПО внутри файла маршрутизации.

Если у вас есть маршрутизаторы, которым требуется авторизация на некоторых маршрутах, а не на других в этом маршрутизаторе, то вы создали дизайн, который не позволяет использовать самый простой способ проверки подлинности. Чтобы это работало, вам нужно добавить проверку подлинности с помощью router.use() для любого маршрутизатора, который имеет маршруты, требующие аутентификации. Опять же, вы сначала определяете маршруты, для которых не требуется авторизация, затем выполняете router.use() с вашим промежуточным программным обеспечением для аутентификации, затем определяете маршруты, для которых требуется авторизация.

Действительно ли мне нужна одна и та же функция (только одного промежуточного программного обеспечения) во многих файлах маршрутизации?

Это зависит от вашего дизайна. Если ваш дизайн требует, чтобы вы добавляли промежуточное программное обеспечение для аутентификации на каждый отдельный маршрутизатор, то вам потребуется в этом промежуточном программном обеспечении для каждого файла маршрутизатора. Но если вы спроектируете свои маршрутизаторы так, чтобы маршрутизаторы не представляли собой смесь аутентификационных и неавторизованных маршрутов, вы, вероятно, сможете обработать промежуточное ПО аутентификации на более высоком уровне, сначала определив неавторизованные маршрутизаторы, а затем добавьте промежуточное ПО аутентификации с помощью app.use() затем определите ваши маршрутизаторы, которым требуется авторизация. Сложность обработки аутентификации полностью зависит от того, как вы организуете маршруты, требующие аутентификации. Если вы смешиваете их с маршрутами, которые не требуют аутентификации, то код определенно более подробный, чтобы определить autn соответствующим образом. Если вы отделите аутентификацию от маршрутов без аутентификации, вы, вероятно, сможете добавить промежуточное ПО аутентификации на более высокий уровень и, возможно, только один раз.

Это хорошее место для использования глобальной функции (для промежуточного программного обеспечения)?

Нет. Нет ничего сложного в том, чтобы добавить один оператор require() в верхнюю часть модуля, чтобы получить промежуточное программное обеспечение, когда вам нужно, и тогда вы сможете избежать использования глобальных переменных.


Общий вопрос о том, как избежать использования require() в верхней части многих ваших модулей, обсуждался ранее. Вот некоторые из этих ссылок:

Node.js глобальный запрос

Как правильно запрашивать файлы в другом файле

NodeJS требует, чтобы все модули были в одном файле, хорошая практика?

Как сделать модуль (например, bcrypt) доступным глобально в Express?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...