-
Add
sessionmiddleware for automatic management ofcontext.sessionacross requestsimport { createCookie } from '@remix-run/cookie' import { createFileStorage } from '@remix-run/session/file-storage' import { session } from '@remix-run/fetch-router/session-middleware' let cookie = createCookie('session', { secrets: ['s3cr3t'] }) let storage = createFileStorage('/tmp/sessions') let router = createRouter({ middleware: [session(cookie, storage)], }) router.map('/', ({ session }) => { session.set('count', Number(session.get('count') ?? 0) + 1) return new Response(`Count: ${session.get('count')}`) })
-
Add
asyncContextmiddleware for storing the request context inAsyncLocalStorageso it is available to all functions in the same async execution contextimport * as assert from 'node:assert/strict' import { asyncContext } from '@remix-run/fetch-router/async-context-middleware' let router = createRouter({ middleware: [asyncContext()], }) router.map('/', (context) => { assert.equal(context, getContext()) return new Response('Home') })
-
Add
fileresponse helper for serving filesimport * as res from '@remix-run/fetch-router/response-helpers' import { findFile } from '@remix-run/lazy-file/fs' router.get('/assets/:filename', async ({ request, params }) => { let file = await findFile('./public/assets', params.filename) if (!file) { return new Response('Not Found', { status: 404 }) } return res.file(file, request) })
-
Add
staticFilesmiddleware for serving static filesimport { staticFiles } from '@remix-run/fetch-router/static-middleware' let router = createRouter({ middleware: [staticFiles('./public')], })