diff options
author | 2022-02-14 12:48:52 -0500 | |
---|---|---|
committer | 2022-02-14 12:48:52 -0500 | |
commit | ba5e2b5e6c20207955991775dc4aa8879331542c (patch) | |
tree | 28e68347035a534f8b56991ede570dfcf830cb01 /examples/ssr/server/server.mjs | |
parent | 61f438fdcbab7163bc3399e623a80d283e018371 (diff) | |
download | astro-ba5e2b5e6c20207955991775dc4aa8879331542c.tar.gz astro-ba5e2b5e6c20207955991775dc4aa8879331542c.tar.zst astro-ba5e2b5e6c20207955991775dc4aa8879331542c.zip |
Flagged SSR support (#2548)
* Checkpoint, basics are working
* Add the `--experimental-ssr` flag
* Adds the changeset
* Fixes population of getStaticPaths results
* Pass through the imported module
* Route manifest test
* Fix remaining tests
* Fix remaining tests
* Copy server assets over
* Fix types
* Allowing passing in the request to the Node version of App
* Improve the example app
* Gets CI to pass
Diffstat (limited to 'examples/ssr/server/server.mjs')
-rw-r--r-- | examples/ssr/server/server.mjs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/examples/ssr/server/server.mjs b/examples/ssr/server/server.mjs new file mode 100644 index 000000000..6f0a0dea6 --- /dev/null +++ b/examples/ssr/server/server.mjs @@ -0,0 +1,55 @@ +import { createServer } from 'http'; +import fs from 'fs'; +import mime from 'mime'; +import { loadApp } from 'astro/app/node'; +import { polyfill } from '@astropub/webapi' +import { apiHandler } from './api.mjs'; + +polyfill(globalThis); + +const clientRoot = new URL('../dist/client/', import.meta.url); +const serverRoot = new URL('../dist/server/', import.meta.url); +const app = await loadApp(serverRoot); + +async function handle(req, res) { + const route = app.match(req); + + if(route) { + const html = await app.render(req, route); + + res.writeHead(200, { + 'Content-Type': 'text/html' + }); + res.end(html) + } else if(/^\/api\//.test(req.url)) { + return apiHandler(req, res); + } else { + let local = new URL('.' + req.url, clientRoot); + try { + const data = await fs.promises.readFile(local); + res.writeHead(200, { + 'Content-Type': mime.getType(req.url) + }); + res.end(data); + } catch { + res.writeHead(404); + res.end(); + } + } +} + +const server = createServer((req, res) => { + handle(req, res).catch(err => { + console.error(err); + res.writeHead(500, { + 'Content-Type': 'text/plain' + }); + res.end(err.toString()); + }) +}); + +server.listen(8085); +console.log('Serving at http://localhost:8085'); + +// Silence weird <time> warning +console.error = () => {}; |