Thứ Ba, 13 tháng 4, 2021

Lucid ORM - Hooks trong AdonisJS




## Hooks
Hooks là những hành động trước hoặc sau các sự kiện tương tác với databases
(`Lifecycle Events`)
Sử dụng model hooks cũng sẽ giúp code sạch đẹp hơn

Ví dụ:
Quay lại file app/Models/User.js
có thể thấy ta đã hook vào ngay trước khi lưu thông tin user thì password sẽ được mã hóa.
<!-->
class User extends Model {
static boot () {
super.boot()

this.addHook('beforeSave', async (userInstance) => {
if (userInstance.dirty.password) {
userInstance.password = await Hash.make(userInstance.password)
}
})
<-->

1. Ngoài việc viết các model hooks ở method boot() ta cũng có thể tạo file hook riêng
và đưa code xử lý vào file này
> adonis make:hook User
==> Output: app/Models/Hooks/UserHook.js

Mở file app/Models/Hooks/UserHook.js và sửa lại như bên dưới
<!-->
'use strict'

/** @type {import('@adonisjs/framework/src/Hash')} */
const Hash = use('Hash')

const UserHook = exports = module.exports = {}

UserHook.hashPassword = async (user) => {
user.password = await Hash.make(user.password)
}
<-->

Sau đó ở file app/Models/User.js sửa lại
<!-->
class User extends Model {
static boot () {
super.boot()
this.addHook('beforeSave', 'UserHook.hashPassword')
}
}
<-->

## Aborting Database Operations
Ngoài ra cũng có thể viết các bắt lỗi giá trị nhập ở đây
File app/Models/Hooks/UserHook.js
<!-->
UserHook.validate = async (user) => {
if (!user.username) {
throw new Error('Username is required')
}
}
<-->

## Lifecycle Events
Event Description
beforeCreate Before creating a new record.
afterCreate After a new record is created.
beforeUpdate Before updating a record.
afterUpdate After a record has been updated.
beforeSave Before creating or updating a new record.
afterSave After a new record has been created or updated.
beforeDelete Before removing a record.
afterDelete After a record is removed.
afterFind After a single record is fetched from the database.
afterFetch After the fetch method is executed.
afterPaginate After the paginate method is executed.
The hook method receives two arguments:
                            an array of model instances and the pagination metadata.



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://...