Added a better error handling

This commit is contained in:
Gilles Lazures 2025-12-20 15:48:57 +01:00
parent f6f4a249c1
commit 18efd445e5
4 changed files with 51 additions and 16 deletions

19
errors/DefaultError.js Normal file
View File

@ -0,0 +1,19 @@
class DefaultError extends Error {
constructor(code, message, cause, name) {
super(message)
this.code = code
this.name = name || "DefaultError"
this.cause = cause || "Internal Server Error"
this.message = message || "Internal Server Error"
this.isOperational = true
}
serialize() {
return {
code: this.code,
message: this.message
}
}
}
module.exports = DefaultError

View File

@ -2,10 +2,18 @@ const express = require("express")
const router = express.Router()
const registerService = require("../services/register")
router.post("/", async (req, res) => {
const { email, username, password } = req.body
const registerResult = registerService.register({ email, username, password })
return res.status(registerResult.code).json(registerResult)
router.post("/", async (req, res, next) => {
try {
const { email, username, password } = req.body
const registerResult = registerService.register({ email, username, password })
return res.status(200).json({
code: 200,
message: "User successfully registered",
data: registerResult
})
} catch (error) {
next(error)
}
})
module.exports = router

View File

@ -96,6 +96,21 @@ for (const route of routes) {
}
}
app.use((err, req, res, next) => {
const statusCode = err.statusCode || 500
logger.error(err.message, ["API", "red"])
if (typeof err.serialize === "function") {
return res.status(statusCode).json(err.serialize())
}
return res.status(500).json({
status: "error",
message: "Internal Server Error"
})
})
app.listen(process.env.WEB_PORT || 3000, () => {
logger.log(`Server listening at port : ${process.env.WEB_PORT || 3000}`, ["WEB", "yellow"])
})

View File

@ -1,22 +1,15 @@
const crypto = require("node:crypto")
const DefaultError = require("../errors/DefaultError")
function register({ email, username, password }) {
if (true) {
return {
code: 200,
message: "User successfully registered",
data: {
id: crypto.randomUUID(),
username: username,
email: email
}
id: crypto.randomUUID(),
username: username,
email: email
}
} else {
return {
code: 418,
error: "I'm a tea pot",
message: "Error occured",
}
throw new DefaultError(418, "I'm a teapot", "", "TeaPotExeception")
}
}