Thứ Ba, 13 tháng 4, 2021

Middleware trong AdonisJS



## Middleware
Middleware được gắn vào trong một vòng đời sống của request (request lifecycle)
Chúng là một tập các function xử lý tuần tự và giúp bạn kiểm soát request
hoặc response một cách nghiêm ngặt hơn.

Ví dụ Middleware `auth`, nếu user chưa đăng nhập mà truy cập vào các tài nguyên
của ứng dụng sẽ bị ném ra một lỗi.

## Tạo mới Middleware
`adonis make:middleware CountryDetector`
<!-->
// File app/Middleware/CountryDetector.js
'use strict'

const geoip = require('geoip-lite')

class CountryDetector {
async handle ({ request }, next) {
const ip = request.ip()
request.country = geoip.lookup(ip).country
await next()
}
}

module.exports = CountryDetector
-->

- Kiểm soát và xử lý trước hoặc sau khi xử lý request
<!-->
'use strict'

class BeforeAndAfterExample {
async handle ({ response }, next) {
// Upstream code...
await next()
// Downstream code...
}
}

module.exports = BeforeAndAfterExample
-->

## Đăng ký middleware
Tất cả các middleware được đăng ký ở start/kernel.js

1. Server Middleware
Server middleware được gọi xử lý trước khi request chạy đến routing system.
const serverMiddleware = [
'Adonis/Middleware/Static',
'Adonis/Middleware/Cors',
]

2. Global Middleware
Global Middleware được gọi xử lý sau khi request đã tìm được một route tương thích để xử lý
const globalMiddleware = [
'Adonis/Middleware/BodyParser',
]
Global Middleware chạy tuần tự theo từng middleware được khai báo.
Cho nên cần chú ý đến thứ tự đăng ký, khi một middleware xử lý lại cần đến một middleware khác.

3. Named Middleware
Named Middleware được gắn vào những route đặc biệt hoặc route group.

// File start/kernel.js
const namedMiddleware = {
auth: 'Adonis/Middleware/Auth',
}

// File start/routes.js
Route.get(url, closure).middleware(['auth'])

## Middleware Properties
// Use the Session Scheme for this route
Route.post(url, closure).middleware(['auth:session'])

// Use the JWT Scheme for this route
Route.post(url, closure).middleware(['auth:jwt'])

- Cũng có thể gom các middleware lại và cách nhau bởi dấu ,
Route.post(url, closure).middleware(['auth:session,jwt'])

- Những thuộc tính này cũng có thể đưa vào trong tham số thứ 3 của một action
async handle (context, next, properties) {
//
}



Không có nhận xét nào:

Đăng nhận xét

Học lập trình web căn bản với PHP

Bài 1: Các kiến thức căn bản Part 1:  https://jimmyvan88.blogspot.com/2012/05/can-ban-lap-trinh-web-voi-php-bai-1-cac.html Part 2:  https://...