diff options
Diffstat (limited to 'packages/integrations/node/src/serve-app.ts')
-rw-r--r-- | packages/integrations/node/src/serve-app.ts | 52 |
1 files changed, 0 insertions, 52 deletions
diff --git a/packages/integrations/node/src/serve-app.ts b/packages/integrations/node/src/serve-app.ts deleted file mode 100644 index 72b4e0fd6..000000000 --- a/packages/integrations/node/src/serve-app.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { AsyncLocalStorage } from 'node:async_hooks'; -import { NodeApp } from 'astro/app/node'; -import type { RequestHandler } from './types.js'; - -/** - * Creates a Node.js http listener for on-demand rendered pages, compatible with http.createServer and Connect middleware. - * If the next callback is provided, it will be called if the request does not have a matching route. - * Intended to be used in both standalone and middleware mode. - */ -export function createAppHandler(app: NodeApp): RequestHandler { - /** - * Keep track of the current request path using AsyncLocalStorage. - * Used to log unhandled rejections with a helpful message. - */ - const als = new AsyncLocalStorage<string>(); - const logger = app.getAdapterLogger(); - process.on('unhandledRejection', (reason) => { - const requestUrl = als.getStore(); - logger.error(`Unhandled rejection while rendering ${requestUrl}`); - console.error(reason); - }); - - return async (req, res, next, locals) => { - let request: Request; - try { - request = NodeApp.createRequest(req); - } catch (err) { - logger.error(`Could not render ${req.url}`); - console.error(err); - res.statusCode = 500; - res.end('Internal Server Error'); - return; - } - - const routeData = app.match(request); - if (routeData) { - const response = await als.run(request.url, () => - app.render(request, { - addCookieHeader: true, - locals, - routeData, - }), - ); - await NodeApp.writeResponse(response, res); - } else if (next) { - return next(); - } else { - const response = await app.render(req); - await NodeApp.writeResponse(response, res); - } - }; -} |