XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

SpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 1 Star 0
返回提交历史

XFEstudio/SpaceNinjaServer

chore: add middleware for error handling (#695)

4756f54f
Sainan <sainan@calamity.inc>
提交于

代码差异

11 个文件 +22 -31
Modified src/app.ts +2 -1
@@ -2,6 +2,7 @@ import express from "express";
2 2
3 3 import { unknownEndpointHandler } from "@/src/middleware/middleware";
4 4 import { requestLogger } from "@/src/middleware/morgenMiddleware";
5 import { errorHandler } from "@/src/middleware/errorHandler";
5 6
6 7 import { apiRouter } from "@/src/routes/api";
7 8 //import { testRouter } from "@/src/routes/test";
@@ -20,7 +21,7 @@ app.use(bodyParser.raw());
20 21 app.use(express.json());
21 22 app.use(bodyParser.text());
22 23 app.use(requestLogger);
23 //app.use(requestLogger);
24 app.use(errorHandler);
24 25
25 26 app.use("/api", apiRouter);
26 27 //app.use("/test", testRouter);
Modified src/controllers/api/claimCompletedRecipeController.ts +0 -3
@@ -30,13 +30,11 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) =
30 30 recipe => recipe._id?.toString() === claimCompletedRecipeRequest.RecipeIds[0].$oid
31 31 );
32 32 if (!pendingRecipe) {
33 logger.error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$oid}`);
34 33 throw new Error(`no pending recipe found with id ${claimCompletedRecipeRequest.RecipeIds[0].$oid}`);
35 34 }
36 35
37 36 //check recipe is indeed ready to be completed
38 37 // if (pendingRecipe.CompletionDate > new Date()) {
39 // logger.error(`recipe ${pendingRecipe._id} is not ready to be completed`);
40 38 // throw new Error(`recipe ${pendingRecipe._id} is not ready to be completed`);
41 39 // }
42 40
@@ -45,7 +43,6 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) =
45 43
46 44 const recipe = getRecipe(pendingRecipe.ItemType);
47 45 if (!recipe) {
48 logger.error(`no completed item found for recipe ${pendingRecipe._id.toString()}`);
49 46 throw new Error(`no completed item found for recipe ${pendingRecipe._id.toString()}`);
50 47 }
51 48
Modified src/controllers/api/getShipController.ts +1 -3
@@ -5,7 +5,6 @@ import { getAccountIdForRequest } from "@/src/services/loginService";
5 5 import { getPersonalRooms } from "@/src/services/personalRoomsService";
6 6 import { getShip } from "@/src/services/shipService";
7 7 import { Loadout } from "@/src/models/inventoryModels/loadoutModel";
8 import { logger } from "@/src/utils/logger";
9 8 import { toOid } from "@/src/helpers/inventoryHelpers";
10 9 import { IGetShipResponse } from "@/src/types/shipTypes";
11 10 import { IPersonalRooms } from "@/src/types/personalRoomsTypes";
@@ -44,8 +43,7 @@ export const getLoadout = async (accountId: string) => {
44 43 const loadout = await Loadout.findOne({ loadoutOwnerId: accountId });
45 44
46 45 if (!loadout) {
47 logger.error(`loadout not found for account ${accountId}`);
48 throw new Error("loadout not found");
46 throw new Error(`loadout not found for account ${accountId}`);
49 47 }
50 48
51 49 return loadout;
Modified src/controllers/api/inventoryController.ts +1 -7
@@ -17,13 +17,7 @@ import {
17 17 import { handleSubsumeCompletion } from "./infestedFoundryController";
18 18
19 19 export const inventoryController: RequestHandler = async (request, response) => {
20 let account;
21 try {
22 account = await getAccountForRequest(request);
23 } catch (e) {
24 response.status(400).send("Log-in expired");
25 return;
26 }
20 const account = await getAccountForRequest(request);
27 21
28 22 const inventory = await Inventory.findOne({ accountOwnerId: account._id.toString() });
29 23
Modified src/controllers/api/startRecipeController.ts +0 -1
@@ -22,7 +22,6 @@ export const startRecipeController: RequestHandler = async (req, res) => {
22 22 const recipe = getRecipe(recipeName);
23 23
24 24 if (!recipe) {
25 logger.error(`unknown recipe ${recipeName}`);
26 25 throw new Error(`unknown recipe ${recipeName}`);
27 26 }
28 27
Added src/middleware/errorHandler.ts +16 -0
@@ -0,0 +1,16 @@
1 import { NextFunction, Request, Response } from "express";
2 import { logger } from "../utils/logger";
3
4 export const errorHandler = (err: Error, req: Request, res: Response, _next: NextFunction): void => {
5 if (err.message == "Invalid accountId-nonce pair") {
6 res.status(400).json("Log-in expired");
7 } else if (err.stack) {
8 const stackArr = err.stack.split("\n");
9 stackArr[0] += ` while processing ${req.path} request`;
10 logger.error(stackArr.join("\n"));
11 res.status(500).end();
12 } else {
13 logger.error(`uncaught error while processing ${req.path} request: ${err.message}`);
14 res.status(500).end();
15 }
16 };
Modified src/services/itemDataService.ts +0 -3
@@ -1,5 +1,4 @@
1 1 import { getIndexAfter } from "@/src/helpers/stringHelpers";
2 import { logger } from "@/src/utils/logger";
3 2 import {
4 3 dict_de,
5 4 dict_en,
@@ -54,7 +53,6 @@ export const getWeaponType = (weaponName: string): WeaponTypeInternal => {
54 53 const weaponType = weaponInfo.productCategory;
55 54
56 55 if (!weaponType) {
57 logger.error(`unknown weapon category for item ${weaponName}`);
58 56 throw new Error(`unknown weapon category for item ${weaponName}`);
59 57 }
60 58
@@ -83,7 +81,6 @@ export const getItemCategoryByUniqueName = (uniqueName: string): string => {
83 81
84 82 const index = getIndexAfter(uniqueName, splitWord);
85 83 if (index === -1) {
86 logger.error(`error parsing item category ${uniqueName}`);
87 84 throw new Error(`error parsing item category ${uniqueName}`);
88 85 }
89 86 const category = uniqueName.substring(index).split("/")[0];
Modified src/services/loadoutService.ts +1 -3
@@ -1,12 +1,10 @@
1 1 import { Loadout } from "@/src/models/inventoryModels/loadoutModel";
2 import { logger } from "@/src/utils/logger";
3 2
4 3 export const getLoadout = async (accountId: string) => {
5 4 const loadout = await Loadout.findOne({ loadoutOwnerId: accountId });
6 5
7 6 if (!loadout) {
8 logger.error(`loadout not found for account ${accountId}`);
9 throw new Error("loadout not found");
7 throw new Error(`loadout not found for account ${accountId}`);
10 8 }
11 9
12 10 return loadout;
Modified src/services/personalRoomsService.ts +1 -3
@@ -1,12 +1,10 @@
1 1 import { PersonalRooms } from "@/src/models/personalRoomsModel";
2 import { logger } from "@/src/utils/logger";
3 2
4 3 export const getPersonalRooms = async (accountId: string) => {
5 4 const personalRooms = await PersonalRooms.findOne({ personalRoomsOwnerId: accountId });
6 5
7 6 if (!personalRooms) {
8 logger.error(`personal rooms not found for account ${accountId}`);
9 throw new Error("personal rooms not found");
7 throw new Error(`personal rooms not found for account ${accountId}`);
10 8 }
11 9 return personalRooms;
12 10 };
Modified src/services/shipCustomizationsService.ts +0 -4
@@ -47,7 +47,6 @@ export const handleSetShipDecorations = async (
47 47 const roomToPlaceIn = rooms.find(room => room.Name === placedDecoration.Room);
48 48
49 49 if (!roomToPlaceIn) {
50 logger.error("room not found");
51 50 throw new Error("room not found");
52 51 }
53 52
@@ -59,7 +58,6 @@ export const handleSetShipDecorations = async (
59 58 );
60 59
61 60 if (existingDecorationIndex === -1) {
62 logger.error("decoration to be moved not found");
63 61 throw new Error("decoration to be moved not found");
64 62 }
65 63
@@ -143,13 +141,11 @@ export const handleSetPlacedDecoInfo = async (accountId: string, req: ISetPlaced
143 141
144 142 const room = personalRooms.Ship.Rooms.find(room => room.Name === req.Room);
145 143 if (!room) {
146 logger.error("room not found");
147 144 throw new Error("room not found");
148 145 }
149 146
150 147 const placedDeco = room.PlacedDecos?.find(x => x._id.toString() == req.DecoId);
151 148 if (!placedDeco) {
152 logger.error("deco not found");
153 149 throw new Error("deco not found");
154 150 }
155 151
Modified src/services/shipService.ts +0 -3
@@ -1,6 +1,5 @@
1 1 import { Ship } from "@/src/models/shipModel";
2 2 import { ILoadoutDatabase } from "@/src/types/saveLoadoutTypes";
3 import { logger } from "@/src/utils/logger";
4 3 import { Types } from "mongoose";
5 4
6 5 export const createShip = async (
@@ -26,7 +25,6 @@ export const getShip = async (shipId: Types.ObjectId, fieldSelection: string = "
26 25 const ship = await Ship.findOne({ _id: shipId }, fieldSelection);
27 26
28 27 if (!ship) {
29 logger.error(`error finding a ship with id ${shipId.toString()}`);
30 28 throw new Error(`error finding a ship with id ${shipId.toString()}`);
31 29 }
32 30
@@ -39,7 +37,6 @@ export const getShipLean = async (shipOwnerId: string) => {
39 37 }>("LoadOutInventory.LoadOutPresets");
40 38
41 39 if (!ship) {
42 logger.error(`error finding a ship for account ${shipOwnerId}`);
43 40 throw new Error(`error finding a ship for account ${shipOwnerId}`);
44 41 }
45 42