[[:oktatas:web:back-end_framework:express|< Express]]
====== Express - Hibakezelés ======
* **Szerző:** Sallai András
* Copyright (c) 2023, Sallai András
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== Lehetséges hibák =====
A hibák két részre oszthatók:
* kliensoldali
* szerveroldali
A kliens oldali hibák általában a nem megfelelő kérés miatt vannak, amelyeket érvényesség vizsgálattal kezelünk.
A hibák kezelése két módon történhet:
* try ... catch szerkezettel
* A Promise catch() függvényével
===== Employee modell =====
Legyen a példa kedvéért egy Employee modell, amiben a nem érték validálva van:
const { DataTypes } = require('sequelize')
const sequelize = require('../database/database')
const Employee = sequelize.define('Employee', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notNull: {
msg: 'Hiba! A name mező megadása kötelező!'
}
}
},
city: { type: DataTypes.STRING, allowNull: true },
salary: { type: DataTypes.DOUBLE , allowNull: true }
})
sequelize.sync({
force: false
})
module.exports = Employee
sequelize.define('egy', {
valami: {
type: DataTypes.STRING,
validate: {
notNull: true, // A valami mező megadása kötelező (A name is required)
notEmpty: true, // A valami mező nem lehet üres (Please privide a name)
isNumeric: true, // A valami mező tartalma csak szám lehet
isEmail: true
}
* https://sequelize.org/docs/v6/core-concepts/validations-and-constraints/#per-attribute-validations (2023)
===== Hibakezelés try catch-el =====
Ebben a példában a try catch hibakezelés le van választva külön függvénybe.
const { Sequelize } = require('sequelize')
const Employee = require('../models/employee')
const EmployeeController = {
async index(req, res) {
try {
await EmployeeController.tryIndex(req, res)
} catch (error) {
res.status(500)
res.json({
success: false,
error: error.message
})
}
},
async tryIndex(req, res) {
const employees = await Employee.findAll()
res.json({
success: true,
data: employees
})
},
async store(req, res) {
try {
await EmployeeController.tryStore(req, res)
} catch (error) {
if(error instanceof Sequelize.ValidationError) {
res.status(400)
}else {
res.status(500)
}
const errorMessage = error.errors[0].message
res.json({
access: false,
error: errorMessage
})
}
},
async tryStore(req, res) {
const employee = {
name: req.body.name,
city: req.body.city,
salary: req.body.salary
}
const result = await Employee.create(employee)
res.status(201)
res.json({
succes: true,
data: result
})
}
}
module.exports = EmployeeController
===== Hibakezelés a Promise catch() metódusával =====
const { Sequelize } = require('sequelize')
const Employee = require('../models/employee')
const EmployeeController = {
async index(req, res) {
await Employee.findAll()
.then( result => {
res.status(200)
res.json({
success: true,
data: result
})
})
.catch(error => {
res.status(500)
res.json({
success: false,
message: 'Error! The query is failed!'
})
})
},
async store(req, res) {
const employee = {
name: req.body.name,
city: req.body.email,
salary: req.body.password
}
await Employee.create(employee)
.then( result => {
res.status(201)
res.json({
succes: true,
data: result
})
})
.catch(error => {
const errorMessage = error.errors[0].message
res.json({
access: false,
error: errorMessage
})
})
}
}
module.exports = EmployeeController