oktatas:web:back-end_framework:express:hibakezeles
Tartalomjegyzék
Express - Hibakezelés
- Szerző: Sallai András
- Copyright © 2023, Sallai András
- 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:
- 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
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 }
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.
- 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
- 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/back-end_framework/express/hibakezeles.txt · Utolsó módosítás: 2023/06/20 20:44 szerkesztette: admin