Облегчение жизни за счет сокращения логики копирования и вставки с использованием именованного промежуточного программного обеспечения
Давайте посмотрим на простой пример.
Вы хотите проверить пользователя ROLE
(admin
, user
, viewer
, editor
, ect
) в своем приложении и в определенных Маршрутах.
Конечно, вы можете реализовать эту проверку, вставив строки кода в каждую из ваших функций Контроллера index
, show
, store
, update
, etc
там, где это необходимо, например:
async index ({ auth }) { const user = await auth.getUser(); if (user.role === 'admin') { // do something } else { // do something } } async store ({ auth }) { const user = await auth.getUser(); if (user.role === 'editor') { // do something } else { // do something } } ....
Но, как видите, каждый раз, когда вам понадобятся эти проверки, будет происходить слишком много копировальных вставок.
Есть лучшее решение.
Именованное промежуточное ПО
Основное различие между промежуточным программным обеспечением global и named заключается в том, что в каждом запросе будет использоваться промежуточное программное обеспечение global, но с именем промежуточного программного обеспечения. (auth
, например) можно использовать там, где это необходимо.
Route .get(`users`, 'UserController.index') .middleware('auth') .formats(['json']);
И этому промежуточному программному обеспечению также можно передать реквизиты.
Создание именованного промежуточного программного обеспечения
1. Используйте команду интерфейса командной строки adonis.
make:middleware
adonis make:middleware RoleDetector
> Select middleware type (Use arrow keys)
For HTTP requests
For Websocket requests
For both HTTP and Websocket requests
Если вы выберете For HTTP requests
, промежуточное ПО будет создано только с функцией handle
:
class SomeMiddleware { async handle (ctx, next, schema) { // do something await next(); } }
При выборе For Websocket requests
будет создано промежуточное ПО с функцией wsHandle
с точно таким же кодом.
Как вы понимаете, выбрав For both HTTP and Websocket requests
с созданием промежуточного программного обеспечения с обеими функциями.
2. Регистрация
Затем вам необходимо зарегистрировать промежуточное ПО в файле /start/kernel.js
, добавив строку пути с вашим собственным именем:
const namedMiddleware = { ... role: 'App/Middleware/RoleDetector', };
3. Начните использовать
Давайте создадим простую функцию console.log () в нашем RoleDetector.js
файле:
И теперь вы можете начать использовать его в своем приложении с теми маршрутами, которые вам нужны. Давайте посмотрим на пример:
Route .resource('addresses', 'AddressController') .middleware(new Map([ [['index'], ['role:admin']], ])) .apiOnly();
Здесь мы говорим, что хотим использовать созданное нами промежуточное ПО RoleDetector (по имени, которое мы определили в namedMiddleware) и передаем ' admin 'свойство.
Посмотрим на консольный результат:
info: RoleDetector. Role: [ 'admin' ]
Вы можете передать столько свойств, сколько захотите:
.middleware(new Map([ [['index'], ['role:admin,custom,helloWorld']], ]))
Результатом консоли будет:
info: RoleDetector. Role: [ 'admin', 'custom', 'helloWorld' ]
Если вам понравился этот рассказ, вы можете также проверить Список всех моих рассказов. Удачного кодирования 🎉