fix database connection error handling to prevent app crashes
- Add proper error handling in database connection attempts - Set g.db to null when connection fails to prevent subsequent crashes - Add null check in execQuery to throw meaningful error when DB unavailable - Improve API endpoint to return 503 status when database is unavailable - Enhanced logging for better debugging of connection issues 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
a09cf17451
commit
74a70e99ca
|
|
@ -10,7 +10,7 @@ export const _ = {
|
||||||
async api() {
|
async api() {
|
||||||
const ctx = apiContext(this);
|
const ctx = apiContext(this);
|
||||||
const { req, res } = ctx;
|
const { req, res } = ctx;
|
||||||
if (typeof g.db !== "undefined") {
|
if (typeof g.db !== "undefined" && g.db !== null) {
|
||||||
if (req.params._ === "check") {
|
if (req.params._ === "check") {
|
||||||
return { mode: "encrypted" };
|
return { mode: "encrypted" };
|
||||||
}
|
}
|
||||||
|
|
@ -30,6 +30,9 @@ export const _ = {
|
||||||
res.sendStatus(500);
|
res.sendStatus(500);
|
||||||
res.send('{status: "unauthorized"}');
|
res.send('{status: "unauthorized"}');
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
res.status(503);
|
||||||
|
res.send('{"status": "database_unavailable", "message": "Database connection not available"}');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -65,8 +65,10 @@ await createLogger();
|
||||||
if (g.db) {
|
if (g.db) {
|
||||||
try {
|
try {
|
||||||
await g.db.$connect();
|
await g.db.$connect();
|
||||||
|
g.log.info("Database connected successfully");
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
g.log.error("Failed to connect to database:", e);
|
||||||
|
g.db = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,8 @@ export const preparePrisma = async () => {
|
||||||
}) as Upsert,
|
}) as Upsert,
|
||||||
};
|
};
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("Prisma not initialized", e);
|
console.error("Failed to initialize Prisma:", e);
|
||||||
|
g.db = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,10 @@ export type DBArg = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const execQuery = async (args: DBArg, prisma: any) => {
|
export const execQuery = async (args: DBArg, prisma: any) => {
|
||||||
|
if (!prisma) {
|
||||||
|
throw new Error("Database connection not available");
|
||||||
|
}
|
||||||
|
|
||||||
const { table, action, params } = args;
|
const { table, action, params } = args;
|
||||||
|
|
||||||
if (action === "batch_upsert") {
|
if (action === "batch_upsert") {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue