Tartalomjegyzék

< Express

Express - Hibakezelés

Lehetséges hibák

A hibák két részre oszthatók:

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:

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