From cf0ec8dcca09429fa1c74b46ae83e886f838c3b9 Mon Sep 17 00:00:00 2001 From: Igor Lobanov Date: Mon, 13 Nov 2023 21:57:04 +0100 Subject: [PATCH] something new --- api/edge-ssr.mjs | 32 ++++++++++++++++++++++++++++++++ api/ssr.mjs | 5 +---- vercel.json | 2 +- 3 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 api/edge-ssr.mjs diff --git a/api/edge-ssr.mjs b/api/edge-ssr.mjs new file mode 100644 index 00000000..c810ed9b --- /dev/null +++ b/api/edge-ssr.mjs @@ -0,0 +1,32 @@ +import { renderPage } from 'vike/server' + +export const config = { + runtime: 'edge' +} +export default async function handler(request) { + const { url, cookies } = request + + const pageContext = await renderPage({ urlOriginal: url, cookies }) + + const { httpResponse, errorWhileRendering, is404 } = pageContext + + if (errorWhileRendering && !is404) { + console.error(errorWhileRendering) + return new Response('', { status: 500 }) + } + + if (!httpResponse) { + return new Response() + } + + const { body, statusCode, headers: headersArray } = httpResponse + + const headers = headersArray.reduce((acc, [name, value]) => { + acc[name] = value + return acc + }, {}) + + headers['Cache-Control'] = 's-maxage=1, stale-while-revalidate' + + return new Response(body, { status: statusCode, headers }) +} diff --git a/api/ssr.mjs b/api/ssr.mjs index 82b97524..b509f590 100644 --- a/api/ssr.mjs +++ b/api/ssr.mjs @@ -1,8 +1,5 @@ import { renderPage } from 'vike/server' -export const config = { - runtime: 'edge' -} export default async function handler(req, res) { const { url, cookies } = req @@ -27,7 +24,7 @@ export default async function handler(req, res) { res.statusCode = statusCode - // headers.forEach(([name, value]) => res.setHeader(name, value)) + headers.forEach(([name, value]) => res.setHeader(name, value)) res.setHeader('Cache-Control', 's-maxage=1, stale-while-revalidate') res.end(body) } diff --git a/vercel.json b/vercel.json index 3cd1f85e..ab03cf0b 100644 --- a/vercel.json +++ b/vercel.json @@ -2,7 +2,7 @@ "rewrites": [ { "source": "/((?!assets/).*)", - "destination": "/api/ssr.mjs" + "destination": "/api/edge-ssr.mjs" } ] }