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/api.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/api.mjs')
-rw-r--r-- | examples/ssr/server/api.mjs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/examples/ssr/server/api.mjs b/examples/ssr/server/api.mjs new file mode 100644 index 000000000..3928d0507 --- /dev/null +++ b/examples/ssr/server/api.mjs @@ -0,0 +1,49 @@ +import fs from 'fs'; +const dbJSON = fs.readFileSync(new URL('./db.json', import.meta.url)); +const db = JSON.parse(dbJSON); +const products = db.products; +const productMap = new Map(products.map(product => [product.id, product])); + +const routes = [ + { + match: /\/api\/products\/([0-9])+/, + async handle(_req, res, [,idStr]) { + const id = Number(idStr); + if(productMap.has(id)) { + const product = productMap.get(id); + res.writeHead(200, { + 'Content-Type': 'application/json' + }); + res.end(JSON.stringify(product)); + } else { + res.writeHead(404, { + 'Content-Type': 'text/plain' + }); + res.end('Not found'); + } + } + }, + { + match: /\/api\/products/, + async handle(_req, res) { + res.writeHead(200, { + 'Content-Type': 'application/json', + }); + res.end(JSON.stringify(products)); + } + } + +] + +export async function apiHandler(req, res) { + for(const route of routes) { + const match = route.match.exec(req.url); + if(match) { + return route.handle(req, res, match); + } + } + res.writeHead(404, { + 'Content-Type': 'text/plain' + }); + res.end('Not found'); +} |