Skip to main content

Nitro

Nuxt Kit provides a set of utilities to help you work with Nitro. These functions allow you to add server handlers, plugins, and prerender routes. Nitro is an open source TypeScript framework to build ultra-fast web servers. Nuxt uses Nitro as its server engine.

addServerHandler

Adds a Nitro server handler. Use this if you want to create server middleware or a custom route.

Type

function addServerHandler(handler: NitroEventHandler): void

Parameters

handler: A handler object with the following properties:
PropertyTypeRequiredDescription
handlerstringtruePath to event handler.
routestringfalsePath prefix or route. If an empty string used, will be used as a middleware.
middlewarebooleanfalseSpecifies this is a middleware handler. Middleware are called on every route.
lazybooleanfalseUse lazy loading to import the handler.
methodstringfalseRouter method matcher. If handler name contains method name, it will be used as default.

Usage

import { addServerHandler, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options) {
    const { resolve } = createResolver(import.meta.url)

    addServerHandler({
      route: '/robots.txt',
      handler: resolve('./runtime/robots.get'),
    })
  },
})

addDevServerHandler

Adds a Nitro server handler to be used only in development mode. This handler will be excluded from production build.

Type

function addDevServerHandler(handler: NitroDevEventHandler): void

Parameters

handler: A handler object with the following properties:
PropertyTypeRequiredDescription
handlerEventHandlertrueEvent handler.
routestringfalsePath prefix or route. If an empty string used, will be used as a middleware.

Usage

import { defineEventHandler } from 'h3'
import { addDevServerHandler, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup() {
    addDevServerHandler({
      handler: defineEventHandler(() => {
        return {
          body: `Response generated at ${new Date().toISOString()}`,
        }
      }),
      route: '/_handler',
    })
  },
})

useNitro

Returns the Nitro instance. Warning: You can call useNitro() only after ready hook. Note: Changes to the Nitro instance configuration are not applied.

Type

function useNitro(): Nitro

Usage

import { defineNuxtModule, useNitro } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options, nuxt) {
    nuxt.hook('ready', () => {
      const nitro = useNitro()
      // Do something with Nitro instance
    })
  },
})

addServerPlugin

Add plugin to extend Nitro’s runtime behavior. Warning: It is necessary to explicitly import defineNitroPlugin from nitropack/runtime within your plugin file.

Type

function addServerPlugin(plugin: string): void

Parameters

PropertyTypeRequiredDescription
pluginstringtruePath to the plugin. The plugin must export a default function that accepts the Nitro instance as an argument.

Usage

import { addServerPlugin, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup() {
    const { resolve } = createResolver(import.meta.url)
    addServerPlugin(resolve('./runtime/plugin.ts'))
  },
})
Runtime plugin example:
export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('request', (event) => {
    console.log('on request', event.path)
  })

  nitroApp.hooks.hook('beforeResponse', (event, { body }) => {
    console.log('on response', event.path, { body })
  })
})

addPrerenderRoutes

Add routes to be prerendered to Nitro.

Type

function addPrerenderRoutes(routes: string | string[]): void

Parameters

PropertyTypeRequiredDescription
routesstring | string[]trueA route or an array of routes to prerender.

Usage

import { addPrerenderRoutes, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  meta: {
    name: 'nuxt-sitemap',
    configKey: 'sitemap',
  },
  defaults: {
    sitemapUrl: '/sitemap.xml',
    prerender: true,
  },
  setup(options) {
    if (options.prerender) {
      addPrerenderRoutes(options.sitemapUrl)
    }
  },
})

addServerImports

Add imports to the server. It makes your imports available in Nitro without the need to import them manually.

Type

function addServerImports(dirs: Import | Import[]): void

Parameters

imports: An object or an array of objects with the following properties:
PropertyTypeRequiredDescription
namestringtrueImport name to be detected.
fromstringtrueModule specifier to import from.
prioritynumberfalsePriority of the import.
disabledbooleanfalseIf this import is disabled.
metaRecord<string, any>falseMetadata of the import.
typebooleanfalseIf this import is a pure type import.
typeFromstringfalseUse this as the from value when generating type declarations.
asstringfalseImport as this name.

Usage

import { addServerImports, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options) {
    const names = [
      'useStoryblok',
      'useStoryblokApi',
      'useStoryblokBridge',
      'renderRichText',
      'RichTextSchema',
    ]

    names.forEach(name =>
      addServerImports({ name, as: name, from: '@storyblok/vue' })
    )
  },
})

addServerImportsDir

Add a directory to be scanned for auto-imports by Nitro.

Type

function addServerImportsDir(dirs: string | string[], opts: { prepend?: boolean }): void

Parameters

PropertyTypeRequiredDescription
dirsstring | string[]trueA directory or an array of directories to register to be scanned by Nitro.
opts{ prepend?: boolean }falseIf prepend is true, the directory is added to the beginning of the scan list.

Usage

import { addServerImportsDir, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options) {
    const { resolve } = createResolver(import.meta.url)
    addServerImportsDir(resolve('./runtime/server/composables'))
  },
})

addServerScanDir

Add directories to be scanned by Nitro. It will check for subdirectories, which will be registered just like the ~~/server folder is. Note: Only ~~/server/api, ~~/server/routes, ~~/server/middleware, and ~~/server/utils are scanned.

Type

function addServerScanDir(dirs: string | string[], opts: { prepend?: boolean }): void

Parameters

PropertyTypeRequiredDescription
dirsstring | string[]trueA directory or an array of directories to register to be scanned by Nitro as server dirs.
opts{ prepend?: boolean }falseIf prepend is true, the directory is added to the beginning of the scan list.

Usage

import { addServerScanDir, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options) {
    const { resolve } = createResolver(import.meta.url)
    addServerScanDir(resolve('./runtime/server'))
  },
})

Source

View source on GitHub