---
url: >-
  https://lit-ui-router.dev/reference/lit-ui-router-ssr/index/functions/responder.md
---
[lit-ui-router-ssr](../../index.md) / [lit-ui-router-ssr](../index.md) / responder

# Function: responder()

```ts
function responder(
   router, 
   responses, 
   options?
): Responder;
```

Defined in: [packages/lit-ui-router-ssr/src/respond.ts:82](https://github.com/simshanith/lit-ui-router/blob/6e47ef8d8a4b24e99c074fb5c8c9cfaddfdb36a4/packages/lit-ui-router-ssr/src/respond.ts#L82)

Answers response verdicts on `router`: settles it on the verdict's subpath,
the request's query included, and runs the handler bound to the state it
lands on with that transition's resolves and the request. The `Response`
goes out as the handler built it; a HEAD gets it without its body.

It fits the fetch adapter's `serveResponse` bare:
`serveResponse: responder(router, responses)`.

## Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `router` | [`UIRouter`](https://ui-router.github.io/core/docs/latest/classes/_router_.uirouter.html) | the server router, its location installed with `installServerLocation` for the verdict's mount |
| `responses` | [`BoundResponses`](../type-aliases/BoundResponses.md) | the handlers, keyed by response state name |
| `options?` | [`SettleOptions`](../interfaces/SettleOptions.md) | passed to `settle` |

## Returns

[`Responder`](../type-aliases/Responder.md)

the responder; its promise rejects as `settle` does, so a resolve that throws fails the request before any handler runs

## Throws

from the responder, an `Error` when the landed state has no handler in `responses`

## Example

```ts
import type { UIRouter } from '@uirouter/core';
import { responder } from 'lit-ui-router-ssr';
import { createServerRouter } from 'ui-router-server';
import { createFetchHandler } from 'ui-router-server/fetch';
import type { ResponseHandlers } from 'ui-router-server/ssr';

const routes = [{ name: 'badge', url: '/badge.svg', response: true }] as const;
const router = createServerRouter({ mounts: { '/': { routes } } });

declare function serveShell(mount: string, request: Request): Promise<Response>;
declare function pageRouter(): UIRouter;

const responses = {
  badge: ({ resolves }) =>
    new Response(resolves.svg, { headers: { 'Content-Type': 'image/svg+xml' } }),
} satisfies ResponseHandlers<(typeof routes)[number], { badge: { svg: string } }>;

const handler = createFetchHandler(router, {
  serveShell,
  serveResponse: (verdict, request) => responder(pageRouter(), responses)(verdict, request),
});
```
