Thứ Ba, 13 tháng 4, 2021

Error Handling trong AdonisJS




## Global exception handler
1. create new file
> adonis make:ehandler
==>
Tạo ra file app/Exceptions/Handler.js

2. Ví dụ
Một khi đã tạo xong thì tất cả các exceptions sẽ đều chạy vào đây.
<!-->
const BaseExceptionHandler = use('BaseExceptionHandler')

class ExceptionHandler extends BaseExceptionHandler {
async handle (error, { response, session }) {
if (error.name === 'ValidationException') {
session.withErrors(error.messages).flashAll()
await session.commit()
response.redirect('back')
return
}

return super.handle(...arguments)
}
}

module.exports = ExceptionHandler
-->
Ở ví dụ trên là đã kiểm soát thêm ValidationException,
ghi nhận lỗi vào session flash và redirect về trang trước đó.

3. Hook một exception
File `start/hooks.js`
<!-->
const { hooks } = require('@adonisjs/ignitor')

hooks.after.providersBooted(() => {
const Exception = use('Exception')

Exception.handle('ValidationException', async (error, { response, session }) => {
session.withErrors(error.messages).flashAll()
await session.commit()
response.redirect('back')
return
})
})
-->

## Custom exceptions
1. Cơ bản
Ngoài các exception sẵn có, bạn có thể tự viết thêm các exception của riêng mình.
> `adonis make:exception Custom`
==> File app/Exceptions/CustomException.js sẽ được tạo ra.
<!-->
const { LogicalException } = require('@adonisjs/generic-exceptions')
const message = 'The item is in an status where modifications are disallowed'
const status = 403
const code = 'E_NOT_EDITABLE'

class CustomException extends LogicalException {
constructor () {
super(message, status, code)
}
}

module.exports = CustomException
-->

==> Sử dụng:
const CustomException = use('App/Exceptions/CustomException')
throw new CustomException()

2. Tự viết thêm handle method
<!-->
const { LogicalException } = require('@adonisjs/generic-exceptions')

class CustomException extends LogicalException {
handle (error, { response }) {
// write more code at here before response
response
.status(500)
.send('Custom exception handled!')
}
}

module.exports = CustomException
-->


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