diff --git a/app/error.vue b/app/error.vue new file mode 100644 index 0000000..1c50f26 --- /dev/null +++ b/app/error.vue @@ -0,0 +1,24 @@ + + + diff --git a/app/plugins/redirect-error.server.ts b/app/plugins/redirect-error.server.ts new file mode 100644 index 0000000..601bfdc --- /dev/null +++ b/app/plugins/redirect-error.server.ts @@ -0,0 +1,6 @@ +export default defineNuxtPlugin(() => { + const event = useRequestEvent() + if (event?.context.redirectNotFound) { + showError({ statusCode: 404, message: 'Link not found' }) + } +}) diff --git a/server/middleware/redirect.ts b/server/middleware/redirect.ts index 20f902f..922502c 100644 --- a/server/middleware/redirect.ts +++ b/server/middleware/redirect.ts @@ -15,16 +15,13 @@ export default defineEventHandler(async (event) => { const path = getRequestURL(event).pathname; - const link = await db.query.links.findFirst({ + let link = await db.query.links.findFirst({ where: eq(tables.links.path, path), }); - if (!link) { - throw createError({ statusCode: 404, message: "Not found" }); - } - - if (link.disabled) { - throw createError({ statusCode: 410, message: "This link has been disabled" }); + if (!link || link.disabled) { + event.context.redirectNotFound = true; + return; } return sendRedirect(event, link.url, 302);