CORE CONCEPTS

Express Adapter

toExpressHandler() bridges Futon's Web-standard fetch() pipeline to an Express (req, res, next) handler, useful when you're incrementally adopting Futon inside an existing Express app.

Usage

Mounting Futon in Express
import express from 'express'; import { Futon, toExpressHandler, json } from '@rasenganjs/futon'; const app = new Futon(); app.get('/api/health', async () => json({ status: 'ok' })); const expressApp = express(); expressApp.use(toExpressHandler(app)); expressApp.listen(3000);

What It Does

  1. Reads the Express req (method, URL, headers, body) and constructs a Web API Request.
  2. Calls app.fetch(request, runtime), the exact same entry point every other adapter uses.
  3. Writes the resulting Response's status, headers, and body back onto the Express res.

If Express's own body-parsing middleware already consumed req.body, the adapter re-serializes it as JSON before handing it to Futon. Otherwise it streams the raw Node IncomingMessage through as a Web ReadableStream.

Streaming Responses

For SSR or any streamed response body, the adapter pipes the Web Response body directly to the Express response socket chunk-by-chunk rather than buffering the whole thing first. This is what makes streamResponse() work transparently under Express too.

Error Handling

Any error thrown while building the request or running app.fetch() is forwarded to Express's own next(error), so your existing Express error-handling middleware still applies as a final safety net, in addition to Futon's own onError().

Hooks
WinterCG Adapter