From 374d735a7191f1b5ad2c616cf877664973df8fcb Mon Sep 17 00:00:00 2001 From: subnub Date: Sat, 28 Sep 2024 09:33:54 -0400 Subject: [PATCH] switched error handling over to middleware instead --- backend/controllers/file-controller.ts | 248 ++++++++----------- backend/controllers/folder-controller.ts | 153 ++++++------ backend/controllers/user-controller.ts | 169 ++++++------- backend/middleware/utils/middleware-utils.ts | 28 ++- backend/server/server.ts | 3 + backend/utils/ForbiddenError.ts | 2 - backend/utils/InternalServerError.ts | 3 - backend/utils/NotAuthorizedError.ts | 2 - backend/utils/NotFoundError.ts | 2 - backend/utils/NotValidDataError.ts | 2 - 10 files changed, 268 insertions(+), 344 deletions(-) diff --git a/backend/controllers/file-controller.ts b/backend/controllers/file-controller.ts index f0afac4..2c6b275 100644 --- a/backend/controllers/file-controller.ts +++ b/backend/controllers/file-controller.ts @@ -1,4 +1,4 @@ -import { Request, Response } from "express"; +import { NextFunction, Request, Response } from "express"; import FileService from "../services/file-service/file-service"; import User, { UserInterface } from "../models/user-model"; import sendShareEmail from "../utils/sendShareEmail"; @@ -292,7 +292,7 @@ class FileController { } }; - removeLink = async (req: RequestType, res: Response) => { + removeLink = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -304,15 +304,12 @@ class FileController { const file = await fileService.removeLink(userID, id); res.send(file); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nRemove Public Link Error File Route:", e.message); - } - res.status(500).send("Server error removing link"); + } catch (e) { + next(e); } }; - makePublic = async (req: RequestType, res: Response) => { + makePublic = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -324,15 +321,16 @@ class FileController { const { file, token } = await fileService.makePublic(userID, fileID); res.send({ file, token }); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nMake Public Error File Route:", e.message); - } - res.status(500).send("Server error making public"); + } catch (e) { + next(e); } }; - getPublicInfo = async (req: RequestType, res: Response) => { + getPublicInfo = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { try { const id = req.params.id; const tempToken = req.params.tempToken; @@ -340,15 +338,16 @@ class FileController { const file = await fileService.getPublicInfo(id, tempToken); res.send(file); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet Public Info Error File Route:", e.message); - } - res.status(500).send("Server error getting public info"); + } catch (e) { + next(e); } }; - makeOneTimePublic = async (req: RequestType, res: Response) => { + makeOneTimePublic = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -360,16 +359,12 @@ class FileController { const { file, token } = await fileService.makeOneTimePublic(userID, id); res.send({ file, token }); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nMake One Time Public Link Error File Route:", e.message); - } - - res.status(500).send("Server error making public"); + } catch (e) { + next(e); } }; - getFileInfo = async (req: RequestType, res: Response) => { + getFileInfo = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -381,16 +376,16 @@ class FileController { const file = await fileService.getFileInfo(userID, fileID); res.send(file); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet File Info Error File Route:", e.message); - } - - res.status(500).send("Server error getting file info"); + } catch (e) { + next(e); } }; - getQuickList = async (req: RequestType, res: Response) => { + getQuickList = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -402,16 +397,12 @@ class FileController { const quickList = await fileService.getQuickList(user, limit); res.send(quickList); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet Quick List Error File Route:", e.message); - } - - res.status(500).send("Server error getting quick list"); + } catch (e) { + next(e); } }; - getList = async (req: RequestType, res: Response) => { + getList = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -443,16 +434,16 @@ class FileController { const fileList = await fileService.getList(queryData, sortBy, limit); res.send(fileList); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet File List Error File Route:", e.message); - } - - res.status(500).send("Server error getting file list"); + } catch (e) { + next(e); } }; - getDownloadToken = async (req: RequestTypeFullUser, res: Response) => { + getDownloadToken = async ( + req: RequestTypeFullUser, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -463,18 +454,15 @@ class FileController { const tempToken = await fileService.getDownloadToken(user); res.send({ tempToken }); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet Download Token Error File Route:", e.message); - } - - res.status(500).send("Server error getting download token"); + } catch (e) { + next(e); } }; getAccessTokenStreamVideo = async ( req: RequestTypeFullUser, - res: Response + res: Response, + next: NextFunction ) => { if (!req.user) return; @@ -490,21 +478,15 @@ class FileController { createStreamVideoCookie(res, streamVideoAccessToken); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log( - "\nGet Access Token Stream Video Fle Route Error:", - e.message - ); - } - - res.status(500).send("Server error getting video stream token"); + } catch (e) { + next(e); } }; removeStreamVideoAccessToken = async ( req: RequestTypeFullUser, - res: Response + res: Response, + next: NextFunction ) => { if (!req.user) return; @@ -525,16 +507,16 @@ class FileController { removeStreamVideoCookie(res); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nRemove Video Token File Router Error:", e.message); - } - - res.status(500).send("Server error removing video stream token"); + } catch (e) { + next(e); } }; - removeTempToken = async (req: RequestTypeFullUser, res: Response) => { + removeTempToken = async ( + req: RequestTypeFullUser, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -547,12 +529,8 @@ class FileController { await fileService.removeTempToken(user, tempToken, currentUUID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nRemove Temp Token Error File Route:", e.message); - } - - res.status(500).send("Server error removing temp token"); + } catch (e) { + next(e); } }; @@ -674,7 +652,11 @@ class FileController { } }; - getSuggestedList = async (req: RequestType, res: Response) => { + getSuggestedList = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -693,16 +675,12 @@ class FileController { ); return res.send({ folderList, fileList }); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet Suggested List Error File Route:", e.message); - } - - res.status(500).send("Server error getting suggested list"); + } catch (e) { + next(e); } }; - renameFile = async (req: RequestType, res: Response) => { + renameFile = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -715,16 +693,16 @@ class FileController { await fileService.renameFile(userID, fileID, title); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nRename File Error File Route:", e.message); - } - - res.status(500).send("Server error renaming file"); + } catch (e) { + next(e); } }; - sendEmailShare = async (req: RequestType, res: Response) => { + sendEmailShare = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -740,16 +718,12 @@ class FileController { await sendShareEmail(file, respient); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nSend Share Email Error File Route:", e.message); - } - - res.status(500).send("Server error sending email link"); + } catch (e) { + next(e); } }; - moveFile = async (req: RequestType, res: Response) => { + moveFile = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -762,16 +736,12 @@ class FileController { await fileService.moveFile(userID, fileID, parentID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nMove File Error File Route:", e.message); - } - - res.status(500).send("Server error moving file"); + } catch (e) { + next(e); } }; - trashFile = async (req: RequestType, res: Response) => { + trashFile = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -783,16 +753,12 @@ class FileController { const trashedFile = await fileService.trashFile(userID, fileID); res.send(trashedFile.toObject()); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nTrash File Error File Route:", e.message); - } - - res.status(500).send("Server error trashing file"); + } catch (e) { + next(e); } }; - restoreFile = async (req: RequestType, res: Response) => { + restoreFile = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -804,16 +770,12 @@ class FileController { const file = await fileService.restoreFile(userID, fileID); res.send(file); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nRestore File Error File Route:", e.message); - } - - res.status(500).send("Server error restoring file"); + } catch (e) { + next(e); } }; - deleteFile = async (req: RequestType, res: Response) => { + deleteFile = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -825,16 +787,12 @@ class FileController { await this.chunkService.deleteFile(userID, fileID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nDelete File Error File Route:", e.message); - } - - res.status(500).send("Server error deleting file"); + } catch (e) { + next(e); } }; - deleteMulti = async (req: RequestType, res: Response) => { + deleteMulti = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -843,21 +801,15 @@ class FileController { const userID = req.user._id; const items = req.body.items; - console.log("items", req.body); - await this.chunkService.deleteMulti(userID, items); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("Delete Multi Error File Route:", e.message); - } - - res.status(500).send("Server error deleting multi"); + } catch (e) { + next(e); } }; - trashMulti = async (req: RequestType, res: Response) => { + trashMulti = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -869,16 +821,16 @@ class FileController { await fileService.trashMulti(userID, items); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nTrash Multi Error File Route:", e.message); - } - - res.status(500).send("Server error trashing multi"); + } catch (e) { + next(e); } }; - restoreMulti = async (req: RequestType, res: Response) => { + restoreMulti = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -890,12 +842,8 @@ class FileController { await fileService.restoreMulti(userID, items); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nRestore Multi Error File Route:", e.message); - } - - res.status(500).send("Server error restoring multi"); + } catch (e) { + next(e); } }; } diff --git a/backend/controllers/folder-controller.ts b/backend/controllers/folder-controller.ts index 26f99aa..41c9553 100644 --- a/backend/controllers/folder-controller.ts +++ b/backend/controllers/folder-controller.ts @@ -1,5 +1,5 @@ import FolderService from "../services/folder-service/folder-service"; -import { Request, Response } from "express"; +import { NextFunction, Request, Response } from "express"; import ChunkService from "../services/chunk-service/chunk-service"; const folderService = new FolderService(); @@ -21,7 +21,11 @@ const chunkService = new ChunkService(); class FolderController { constructor() {} - createFolder = async (req: RequestType, res: Response) => { + createFolder = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -34,15 +38,16 @@ class FolderController { const folder = await folderService.createFolder(userID, name, parent); res.send(folder); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nUpload Folder Error Folder Route:", e.message); - } - res.status(500).send("Server error creating folder"); + } catch (e) { + next(e); } }; - deleteFolder = async (req: RequestType, res: Response) => { + deleteFolder = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -55,16 +60,16 @@ class FolderController { await chunkService.deleteFolder(userID, folderID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nDelete Folder Error Folder Route:", e.message); - } - - res.status(500).send("Server error deleting folder"); + } catch (e) { + next(e); } }; - getSubfolderFullList = async (req: RequestType, res: Response) => { + getSubfolderFullList = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -76,16 +81,12 @@ class FolderController { const subfolderList = await folderService.getSubfolderFullList(user, id); res.send(subfolderList); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet Subfolder List Error Folder Route:", e.message); - } - - res.status(500).send("Server error getting subfolder full list"); + } catch (e) { + next(e); } }; - deleteAll = async (req: RequestType, res: Response) => { + deleteAll = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -96,16 +97,12 @@ class FolderController { await chunkService.deleteAll(userID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nDelete All Error Folder Route:", e.message); - } - - res.status(500).send("Server error deleting all"); + } catch (e) { + next(e); } }; - getInfo = async (req: RequestType, res: Response) => { + getInfo = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -117,16 +114,16 @@ class FolderController { const folder = await folderService.getFolderInfo(userID, folderID); res.send(folder); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet Info Error Folder Route:", e.message); - } - - res.status(500).send("Server error getting user info"); + } catch (e) { + next(e); } }; - getSubfolderList = async (req: RequestType, res: Response) => { + getSubfolderList = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -139,16 +136,16 @@ class FolderController { await folderService.getFolderSublist(userID, folderID); res.send({ folderIDList, folderNameList }); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nServer error getting subfolder list", e.message); - } - - res.status(500).send(""); + } catch (e) { + next(e); } }; - getFolderList = async (req: RequestType, res: Response) => { + getFolderList = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -160,16 +157,12 @@ class FolderController { const folderList = await folderService.getFolderList(user, query); res.send(folderList); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet Folder List Error Folder Route:", e.message); - } - - res.status(500).send("Server error getting folder list"); + } catch (e) { + next(e); } }; - moveFolder = async (req: RequestType, res: Response) => { + moveFolder = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -182,16 +175,12 @@ class FolderController { await folderService.moveFolder(userID, folderID, parentID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nMove Folder Error Folder Route:", e.message); - } - - res.status(500).send("Server error moving folder"); + } catch (e) { + next(e); } }; - trashFolder = async (req: RequestType, res: Response) => { + trashFolder = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -203,16 +192,16 @@ class FolderController { await folderService.trashFolder(userID, folderID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nTrash Folder Error Folder Route:", e.message); - } - - res.status(500).send("Server error trashing folder"); + } catch (e) { + next(e); } }; - restoreFolder = async (req: RequestType, res: Response) => { + restoreFolder = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -224,16 +213,16 @@ class FolderController { await folderService.restoreFolder(userID, folderID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("Restore Folder Error Folder Route:", e.message); - } - - res.status(500).send("Server error restore folder"); + } catch (e) { + next(e); } }; - renameFolder = async (req: RequestType, res: Response) => { + renameFolder = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -246,16 +235,16 @@ class FolderController { await folderService.renameFolder(userID, folderID, title); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nRename Folder Error Folder Route:", e.message); - } - - res.status(500).send("Server error renaming folder"); + } catch (e) { + next(e); } }; - getMoveFolderList = async (req: RequestType, res: Response) => { + getMoveFolderList = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -278,12 +267,8 @@ class FolderController { ); res.send(folderList); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet Move Folder List Error Folder Route:", e.message); - } - - res.status(500).send("Server error getting move folder list"); + } catch (e) { + next(e); } }; } diff --git a/backend/controllers/user-controller.ts b/backend/controllers/user-controller.ts index c15ea11..5eae53c 100644 --- a/backend/controllers/user-controller.ts +++ b/backend/controllers/user-controller.ts @@ -1,6 +1,6 @@ import env from "../enviroment/env"; import UserService from "../services/user-service/user-service"; -import { Request, Response } from "express"; +import { NextFunction, Request, Response } from "express"; import { UserInterface } from "../models/user-model"; import { createLoginCookie, @@ -33,21 +33,17 @@ interface RequestType extends Request { class UserController { constructor() {} - getUser = async (req: RequestType, res: Response) => { + getUser = async (req: RequestType, res: Response, next: NextFunction) => { try { const user = req.user!; res.send(user); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet User Route Error:", e.message); - } - - res.status(500).send("Server error getting user info"); + } catch (e) { + next(e); } }; - login = async (req: RequestType, res: Response) => { + login = async (req: RequestType, res: Response, next: NextFunction) => { try { const body = req.body; @@ -61,16 +57,16 @@ class UserController { createLoginCookie(res, accessToken, refreshToken); res.status(200).send({ user }); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nLogin User Route Error:", e.message); - } - - res.status(500).send("Server error attempting to login"); + } catch (e) { + next(e); } }; - getToken = async (req: RequestTypeRefresh, res: Response) => { + getToken = async ( + req: RequestTypeRefresh, + res: Response, + next: NextFunction + ) => { try { const user = req.user; @@ -89,16 +85,12 @@ class UserController { createLoginCookie(res, accessToken, refreshToken); res.status(201).send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet Refresh Token User Route Error:", e.message); - } - - res.status(500).send(""); + } catch (e) { + next(e); } }; - logout = async (req: RequestType, res: Response) => { + logout = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -112,16 +104,13 @@ class UserController { createLogoutCookie(res); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nLogout User Route Error:", e.message); - } + } catch (e) { createLogoutCookie(res); - res.status(500).send("Server error attempting to logout"); + next(e); } }; - logoutAll = async (req: RequestType, res: Response) => { + logoutAll = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) return; try { @@ -132,16 +121,12 @@ class UserController { createLogoutCookie(res); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nLogout All User Route Error:", e.message); - } - - res.status(500).send("Server error attempting to logout all"); + } catch (e) { + next(e); } }; - createUser = async (req: RequestType, res: Response) => { + createUser = async (req: RequestType, res: Response, next: NextFunction) => { if (env.createAcctBlocked) { res.status(401).send(); return; @@ -156,16 +141,16 @@ class UserController { createLoginCookie(res, accessToken, refreshToken); res.status(201).send({ user, emailSent }); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nCreate User Route Error:", e.message); - } - - res.status(500).send("Server error creating user"); + } catch (e) { + next(e); } }; - changePassword = async (req: RequestType, res: Response) => { + changePassword = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -189,16 +174,16 @@ class UserController { createLoginCookie(res, accessToken, refreshToken); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nChange Password User Route Error:", e.message); - } - - res.status(500).send("Server error changing password"); + } catch (e) { + next(e); } }; - refreshStorageSize = async (req: RequestType, res: Response) => { + refreshStorageSize = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -209,16 +194,16 @@ class UserController { await UserProvider.refreshStorageSize(userID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nRefresh Storage Size User Route Error:", e.message); - } - - res.status(500).send("Server error refreshing storage size"); + } catch (e) { + next(e); } }; - getUserDetailed = async (req: RequestType, res: Response) => { + getUserDetailed = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -229,16 +214,12 @@ class UserController { const userDetailed = await UserProvider.getUserDetailed(userID); res.send(userDetailed); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nGet User Detailed User Route Error:", e.message); - } - - res.status(500).send("Server error getting full user info"); + } catch (e) { + next(e); } }; - verifyEmail = async (req: RequestType, res: Response) => { + verifyEmail = async (req: RequestType, res: Response, next: NextFunction) => { try { const verifyToken = req.body.emailToken; @@ -253,16 +234,16 @@ class UserController { createLoginCookie(res, accessToken, refreshToken); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nVerify Email User Route Error:", e.message); - } - - res.status(500).send("Server error verifying email"); + } catch (e) { + next(e); } }; - resendVerifyEmail = async (req: RequestType, res: Response) => { + resendVerifyEmail = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { if (!req.user) { return; } @@ -273,32 +254,32 @@ class UserController { await UserProvider.resendVerifyEmail(userID); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nResend Email User Route Error:", e.message); - } - - res.status(500).send("Server error resending verify email"); + } catch (e) { + next(e); } }; - sendPasswordReset = async (req: RequestType, res: Response) => { + sendPasswordReset = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { try { const email = req.body.email; await UserProvider.sendPasswordReset(email); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nSend Password Reset Email User Route Error:", e.message); - } - - res.status(500).send("Server error sending password reset"); + } catch (e) { + next(e); } }; - resetPassword = async (req: RequestType, res: Response) => { + resetPassword = async ( + req: RequestType, + res: Response, + next: NextFunction + ) => { try { const verifyToken = req.body.passwordToken; const newPassword = req.body.password; @@ -306,16 +287,12 @@ class UserController { await UserProvider.resetPassword(newPassword, verifyToken); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nReset Password User Route Error:", e.message); - } - - res.status(500).send("Server error resetting password"); + } catch (e) { + next(e); } }; - addName = async (req: RequestType, res: Response) => { + addName = async (req: RequestType, res: Response, next: NextFunction) => { if (!req.user) { return; } @@ -327,12 +304,8 @@ class UserController { await UserProvider.addName(userID, name); res.send(); - } catch (e: unknown) { - if (e instanceof Error) { - console.log("\nAdd Name User Route Error:", e.message); - } - - res.status(500).send("Server error adding name"); + } catch (e) { + next(e); } }; } diff --git a/backend/middleware/utils/middleware-utils.ts b/backend/middleware/utils/middleware-utils.ts index df0368d..36bb919 100644 --- a/backend/middleware/utils/middleware-utils.ts +++ b/backend/middleware/utils/middleware-utils.ts @@ -1,6 +1,11 @@ -import { NextFunction } from "express"; +import e, { NextFunction } from "express"; import { validationResult } from "express-validator"; import { Request, Response } from "express"; +import NotAuthorizedError from "../../utils/NotAuthorizedError"; +import NotFoundError from "../../utils/NotFoundError"; +import InternalServerError from "../../utils/InternalServerError"; +import ForbiddenError from "../../utils/ForbiddenError"; +import NotValidDataError from "../../utils/NotValidDataError"; export const middlewareValidationFunction = ( req: Request, @@ -13,3 +18,24 @@ export const middlewareValidationFunction = ( } next(); }; + +export const middlewareErrorHandler = ( + error: Error, + _req: Request, + res: Response, + _next: NextFunction +) => { + console.log("Express route error: ", error); + + if ( + error instanceof NotAuthorizedError || + error instanceof ForbiddenError || + error instanceof NotFoundError || + error instanceof InternalServerError || + error instanceof NotValidDataError + ) { + return res.status(error.code).send(error.message); + } + + res.status(500).send("Server error"); +}; diff --git a/backend/server/server.ts b/backend/server/server.ts index d2c871c..1e8aa5a 100755 --- a/backend/server/server.ts +++ b/backend/server/server.ts @@ -12,6 +12,7 @@ import compression from "compression"; import http from "http"; import cookieParser from "cookie-parser"; import env from "../enviroment/env"; +import { middlewareErrorHandler } from "../middleware/utils/middleware-utils"; // import requestIp from "request-ip"; const app = express(); @@ -61,6 +62,8 @@ app.use( app.use(userRouter, fileRouter, folderRouter); +app.use(middlewareErrorHandler); + //const nodeMode = process.env.NODE_ENV ? "Production" : "Development/Testing"; //console.log("Node Enviroment Mode:", nodeMode); diff --git a/backend/utils/ForbiddenError.ts b/backend/utils/ForbiddenError.ts index 28b8c05..44b036a 100644 --- a/backend/utils/ForbiddenError.ts +++ b/backend/utils/ForbiddenError.ts @@ -1,12 +1,10 @@ class ForbiddenError extends Error { code: number; - isCustomError: boolean; constructor(args: any) { super(args); this.code = 403; - this.isCustomError = true; } } diff --git a/backend/utils/InternalServerError.ts b/backend/utils/InternalServerError.ts index 0ff000f..c93ae4e 100644 --- a/backend/utils/InternalServerError.ts +++ b/backend/utils/InternalServerError.ts @@ -1,12 +1,9 @@ class InternalServerError extends Error { code: number; - isCustomError: boolean; - constructor(args: any) { super(args); this.code = 500; - this.isCustomError = true; } } diff --git a/backend/utils/NotAuthorizedError.ts b/backend/utils/NotAuthorizedError.ts index c756e8b..bc3f770 100644 --- a/backend/utils/NotAuthorizedError.ts +++ b/backend/utils/NotAuthorizedError.ts @@ -1,12 +1,10 @@ class NotAuthorizedError extends Error { code: number; - isCustomError: boolean; constructor(args: any) { super(args); this.code = 401; - this.isCustomError = true; } } diff --git a/backend/utils/NotFoundError.ts b/backend/utils/NotFoundError.ts index af86e09..70de105 100644 --- a/backend/utils/NotFoundError.ts +++ b/backend/utils/NotFoundError.ts @@ -1,12 +1,10 @@ class NotFoundError extends Error { code: number; - isCustomError: boolean; constructor(args: any) { super(args); this.code = 404; - this.isCustomError = true; } } diff --git a/backend/utils/NotValidDataError.ts b/backend/utils/NotValidDataError.ts index 01601bf..893ca7c 100644 --- a/backend/utils/NotValidDataError.ts +++ b/backend/utils/NotValidDataError.ts @@ -1,12 +1,10 @@ class NotValidDataError extends Error { code: number; - isCustomError: boolean; constructor(args: any) { super(args); this.code = 403; - this.isCustomError = true; } }