From 88ed447573d21c95f2e42e5d3071e8c064a63f69 Mon Sep 17 00:00:00 2001 From: wancat Date: Tue, 25 Jul 2023 15:46:55 +0800 Subject: [PATCH] fix: error handling - Remove unnecessary try-catch block in createSession function - Add error handling for missing session ID in socket.js - Improve error handling in connectDB function - Add error handling middleware for server errors - Add default export for get function in env.js Signed-off-by: wancat --- .../src/api/controllers/sessionController.js | 12 ++++----- server/src/api/socket.js | 26 ++++++++++++++----- server/src/db.js | 3 ++- server/src/index.js | 3 +++ server/src/middleware/error.js | 5 ++++ server/src/utils/env.js | 1 + 6 files changed, 36 insertions(+), 14 deletions(-) diff --git a/server/src/api/controllers/sessionController.js b/server/src/api/controllers/sessionController.js index 19d431d..81e163f 100644 --- a/server/src/api/controllers/sessionController.js +++ b/server/src/api/controllers/sessionController.js @@ -22,13 +22,13 @@ export async function createSession(req, res) { return } - const newSession = new Session({ - user: req.user, - quest, - containerId: `quest-${quest.id}-${req.user.username}-${Date.now()}`, - }) - try { + const newSession = new Session({ + user: req.user, + quest, + containerId: `quest-${quest.id}-${req.user.username}-${Date.now()}`, + }) + const session = await newSession.save() res.status(201).json(session) } catch (err) { diff --git a/server/src/api/socket.js b/server/src/api/socket.js index e5d4bc4..24a75e7 100644 --- a/server/src/api/socket.js +++ b/server/src/api/socket.js @@ -21,13 +21,25 @@ export default (server) => { io.on('connection', async (socket) => { console.log('Connected to the client.') - const session = await Session.findOne({ - _id: socket.handshake.query.session_id, - user: socket.user, - }) - - if (!session) { - socket.send('Session not found.') + const sessionId = socket.handshake.query.session_id + if (!sessionId) { + socket.send('Session ID not found.') + socket.disconnect() + return + } + let session + try { + session = await Session.findOne({ + _id: sessionId, + user: socket.user, + }) + if (!session) { + socket.send('Session not found.') + socket.disconnect() + return + } + } catch (err) { + socket.send(err.message) socket.disconnect() return } diff --git a/server/src/db.js b/server/src/db.js index fb575c9..842ce6f 100644 --- a/server/src/db.js +++ b/server/src/db.js @@ -6,6 +6,7 @@ export default async function connectDB() { await mongoose.connect(config.db) console.log('Connected to MongoDB') } catch (err) { - console.log(err) + console.error(err) + process.exit(1) } } diff --git a/server/src/index.js b/server/src/index.js index 80a424e..4b5ad47 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -9,6 +9,7 @@ import connectDB from './db.js' import apiRouter from './api/routes/index.js' import loadAndUpdateQuests from './utils/quest.js' import config from './config.js' +import errorHandler from './middleware/error.js' async function main() { const app = express() @@ -28,6 +29,8 @@ async function main() { app.use('/api/v1', apiRouter) + app.use(errorHandler) + server.listen(config.port, config.host, () => { console.log(`Server listening at http://${config.host}:${config.port}`) }) diff --git a/server/src/middleware/error.js b/server/src/middleware/error.js index e69de29..fc1be7e 100644 --- a/server/src/middleware/error.js +++ b/server/src/middleware/error.js @@ -0,0 +1,5 @@ +// eslint-disable-next-line no-unused-vars +export default function errorHandler(err, req, res, next) { + console.error(err.stack) // Log error stack trace to the console + res.status(500).send({ message: err.message }) // Send error response +} diff --git a/server/src/utils/env.js b/server/src/utils/env.js index 2db79cc..3195d31 100644 --- a/server/src/utils/env.js +++ b/server/src/utils/env.js @@ -1,3 +1,4 @@ +/* eslint-disable import/prefer-default-export */ export function get(key, defaultValue) { const value = process.env[key] if (value != null) {