Nitro API

Composables

Last updated by Harlan Wilton in chore: missing files.

These composables are auto-imported in Nitro server context (API routes, middleware, plugins).

getPages

Type: (event?: H3Event) => Promise<Map<string, PageEntry>>

Returns all indexed pages as a Map keyed by route.

server/api/pages.get.ts
export default defineEventHandler(async (event) => {
  const pages = await getPages(event)
  return Array.from(pages.values())
})

PageEntry:

PropertyTypeDescription
routestringPage route (e.g., /about)
titlestringPage title
descriptionstringMeta description
headingsstringPipe-separated headings (e.g., h1:Title|h2:Subtitle)
updatedAtstringISO timestamp

getPagesList

Type: (event?: H3Event) => Promise<PageListItem[]>

Returns pages as a flat array (used by MCP tools).

server/api/search.get.ts
export default defineEventHandler(async (event) => {
  const query = getQuery(event).q as string
  const pages = await getPagesList(event)
  return pages.filter(p =>
    p.title.toLowerCase().includes(query.toLowerCase())
  )
})

getErrorRoutes

Type: (event?: H3Event) => Promise<Set<string>>

Returns routes that returned errors during prerendering.

server/api/health.get.ts
export default defineEventHandler(async (event) => {
  const errors = await getErrorRoutes(event)
  return {
    healthy: errors.size === 0,
    errorCount: errors.size,
    routes: Array.from(errors)
  }
})

indexPage

Type: (route: string, html: string, options?: IndexPageOptions) => Promise<IndexPageResult>

Manually index a page. Requires runtimeIndexing.enabled.

server/api/reindex.post.ts
export default defineEventHandler(async (event) => {
  const { path } = await readBody(event)
  const html = await $fetch(path)
  return indexPage(path, html, { force: true })
})

Options:

OptionTypeDefaultDescription
ttlnumberconfig valueOverride TTL check
forcebooleanfalseRe-index even if fresh
skipHookbooleanfalseSkip ai-ready:page:indexed hook

Result:

PropertyTypeDescription
successbooleanWhether indexing succeeded
skippedbooleantrue if page was fresh
isUpdatebooleantrue if updating existing entry
dataobjectPage data if successful
errorstringError message if failed

indexPageByRoute

Type: (route: string, event?: H3Event, options?: IndexPageOptions) => Promise<IndexPageResult>

Fetch HTML and index in one call.

server/plugins/warm-cache.ts
export default defineNitroPlugin(async () => {
  // Pre-warm important pages on startup
  const routes = ['/', '/docs', '/pricing']
  await Promise.all(routes.map(r => indexPageByRoute(r)))
})

Data Sources

The composables read from different sources based on context:

ContextSource
DevelopmentEmpty (no data)
PrerenderFilesystem JSONL
Runtime + runtimeIndexingUnstorage
Runtime (default)Static pages.json
Did this page help you?