oktatas:web:express:hibakezeles
Tartalomjegyzék
Express - Hibakezelés
- Szerző: Sallai András
- Copyright © 2023, Sallai András
- Szerkesztve: 2025
- 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.
Ha érvénytelen adatot kapunk a klienstől az hibát dob. 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 Sequelize-ban írva, ahol a név mező érvényességét vizsgáljuk:
- app/models/employee.js
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
A notNull kulccsal megköveteljük a mező kitöltését.
Néhány érvényesség
Nézzük meg néhány további lehetséges érvényesség-ellenőrzést, a teljesség igénye nélkül.
sequelize.define('egy', { valami: { type: DataTypes.STRING, validate: { notNull: true, // A valami mező megadása kötelező notEmpty: true, // A valami mező nem lehet üres isNumeric: true, // A valami mező tartalma csak szám lehet isEmail: true // E-mail címnek látszik? }
Még több ellenőrzési lehetőség.
Hibakezelés try catch-el
Ebben a példában a try catch szerkezetet használjuk, ahol ez a hibakezelés le van választva külön függvénybe.
- app/controllers/employeecontroller.js
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
A Promise objektum catch() függvénnyel is elkaphatjuk a hibát.
- app/controllers/employeecontroller.js
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
oktatas/web/express/hibakezeles.txt · Utolsó módosítás: 2025/08/01 10:19 szerkesztette: admin