[[: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