
Облегчение жизни за счет сокращения логики копирования и вставки с использованием именованного промежуточного программного обеспечения
Давайте посмотрим на простой пример.
Вы хотите проверить пользователя 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' ]
Если вам понравился этот рассказ, вы можете также проверить Список всех моих рассказов. Удачного кодирования 🎉