Nitro는 초고속 웹 서버를 구축하기 위한 오픈 소스 TypeScript 프레임워크입니다. Nuxt는 Nitro를 서버 엔진으로 사용합니다. useNitro를 사용해 Nitro 인스턴스에 접근할 수 있고, addServerHandler로 서버 핸들러를 추가할 수 있으며, addDevServerHandler로 개발 모드에서만 사용되는 서버 핸들러를 추가할 수 있습니다. 또한 addServerPlugin으로 Nitro의 런타임 동작을 확장하는 플러그인을 추가하고, addPrerenderRoutes로 Nitro가 프리렌더할 라우트를 추가할 수 있습니다.
addServerHandlerNitro 서버 핸들러를 추가합니다. 서버 미들웨어나 커스텀 라우트를 만들고 싶을 때 사용하세요.
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'),
})
},
})
function addServerHandler (handler: NitroEventHandler): void
handler: 다음 속성을 가진 핸들러 객체:
| Property | Type | Required | Description |
|---|---|---|---|
handler | string | true | 이벤트 핸들러의 경로. |
route | string | false | 경로 프리픽스 또는 라우트. 빈 문자열을 사용하면 미들웨어로 사용됩니다. |
middleware | boolean | false | 이 핸들러가 미들웨어인지 지정합니다. 미들웨어는 모든 라우트에서 호출되며, 일반적으로 다음 핸들러로 넘기기 위해 아무것도 반환하지 않아야 합니다. |
lazy | boolean | false | 핸들러를 가져올 때 지연 로딩을 사용합니다. 이는 핸들러를 필요할 때만 로드하고 싶을 때 유용합니다. |
method | string | false | 라우터 메서드 매처. 핸들러 이름에 메서드 이름이 포함되어 있으면 기본값으로 사용됩니다. |
모듈에서 addServerHandler를 사용해 서버 핸들러를 추가할 수 있습니다.
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'),
})
},
})
export default defineEventHandler(() => {
return {
body: `User-agent: *\nDisallow: /`,
}
})
/robots.txt에 접근하면 다음과 같은 응답을 반환합니다:
User-agent: *
Disallow: /
addDevServerHandler개발 모드에서만 사용되는 Nitro 서버 핸들러를 추가합니다. 이 핸들러는 프로덕션 빌드에서는 제외됩니다.
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',
})
},
})
function addDevServerHandler (handler: NitroDevEventHandler): void
handler: 다음 속성을 가진 핸들러 객체:
| Property | Type | Required | Description |
|---|---|---|---|
handler | EventHandler | true | 이벤트 핸들러. |
route | string | false | 경로 프리픽스 또는 라우트. 빈 문자열을 사용하면 미들웨어로 사용됩니다. |
일부 경우에는 Tailwind 설정 뷰어와 같이, 개발용으로만 사용하는 서버 핸들러를 만들고 싶을 수 있습니다.
import { joinURL } from 'ufo'
import { addDevServerHandler, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
async setup (options, nuxt) {
const route = joinURL(nuxt.options.app?.baseURL, '/_tailwind')
// @ts-expect-error - tailwind-config-viewer는 올바른 타입을 제공하지 않습니다
const createServer = await import('tailwind-config-viewer/server/index.js').then(r => r.default || r) as any
const viewerDevMiddleware = createServer({ tailwindConfigProvider: () => options, routerPrefix: route }).asMiddleware()
addDevServerHandler({ route, handler: viewerDevMiddleware })
},
})
useNitroNitro 인스턴스를 반환합니다.
ready 훅 이후에만 useNitro()를 호출할 수 있습니다.import { defineNuxtModule, useNitro } from '@nuxt/kit'
export default defineNuxtModule({
setup (options, nuxt) {
const resolver = createResolver(import.meta.url)
nuxt.hook('ready', () => {
const nitro = useNitro()
// Nitro 인스턴스로 무언가를 수행
})
},
})
function useNitro (): Nitro
addServerPluginNitro의 런타임 동작을 확장하기 위한 플러그인을 추가합니다.
defineNitroPlugin을 nitropack/runtime에서 명시적으로 import해야 합니다. useRuntimeConfig와 같은 유틸리티에도 동일한 요구 사항이 적용됩니다.import { addServerPlugin, createResolver, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
setup () {
const { resolve } = createResolver(import.meta.url)
addServerPlugin(resolve('./runtime/plugin.ts'))
},
})
function addServerPlugin (plugin: string): void
| Property | Type | Required | Description |
|---|---|---|---|
plugin | string | true | 플러그인의 경로. 플러그인은 Nitro 인스턴스를 인자로 받는 기본 함수를 export해야 합니다. |
import { addServerPlugin, createResolver, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
setup () {
const { resolve } = createResolver(import.meta.url)
addServerPlugin(resolve('./runtime/plugin.ts'))
},
})
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 })
})
nitroApp.hooks.hook('afterResponse', (event, { body }) => {
console.log('on after response', event.path, { body })
})
})
addPrerenderRoutesNitro에 프리렌더할 라우트를 추가합니다.
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)
}
},
})
function addPrerenderRoutes (routes: string | string[]): void
| Property | Type | Required | Description |
|---|---|---|---|
routes | string | string[] | true | 프리렌더할 라우트 또는 라우트 배열. |
addServerImports서버에 import를 추가합니다. 이를 통해 Nitro에서 수동으로 import하지 않고도 해당 import를 사용할 수 있습니다.
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' }),
)
},
})
function addServerImports (dirs: Import | Import[]): void
imports: 다음 속성을 가진 객체 또는 객체 배열:
| Property | Type | Required | Description |
|---|---|---|---|
name | string | true | 감지할 import 이름. |
from | string | true | import할 모듈 식별자. |
priority | number | false | import의 우선순위; 동일한 이름의 import가 여러 개 있을 경우, 가장 높은 우선순위를 가진 것이 사용됩니다. |
disabled | boolean | false | 이 import가 비활성화되었는지 여부. |
meta | Record<string, any> | false | import의 메타데이터. |
type | boolean | false | 이 import가 순수 타입 import인지 여부. |
typeFrom | string | false | 타입 선언을 생성할 때 from 값으로 사용할 값. |
as | string | false | 이 이름으로 import. |
addServerImportsDirNitro가 자동 import를 위해 스캔할 디렉터리를 추가합니다.
import { addServerImportsDir, createResolver, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
meta: {
name: 'my-module',
configKey: 'myModule',
},
setup (options) {
const { resolve } = createResolver(import.meta.url)
addServerImportsDir(resolve('./runtime/server/composables'))
},
})
function addServerImportsDir (dirs: string | string[], opts: { prepend?: boolean }): void
| Property | Type | Required | Description |
|---|---|---|---|
dirs | string | string[] | true | Nitro가 스캔하도록 등록할 디렉터리 또는 디렉터리 배열. |
opts | { prepend?: boolean } | false | import 디렉터리에 대한 옵션. prepend가 true이면, 디렉터리가 스캔 목록의 시작 부분에 추가됩니다. |
addServerImportsDir를 사용해 Nitro가 스캔할 디렉터리를 추가할 수 있습니다. 이는 Nitro가 커스텀 서버 디렉터리에서 함수를 자동 import하도록 하고 싶을 때 유용합니다.
import { addServerImportsDir, createResolver, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
meta: {
name: 'my-module',
configKey: 'myModule',
},
setup (options) {
const { resolve } = createResolver(import.meta.url)
addServerImportsDir(resolve('./runtime/server/composables'))
},
})
export function useApiSecret () {
const { apiSecret } = useRuntimeConfig()
return apiSecret
}
그런 다음 서버 코드에서 useApiSecret 함수를 사용할 수 있습니다:
export default defineEventHandler(() => {
const apiSecret = useApiSecret()
// apiSecret으로 무언가를 수행
})
addServerScanDirNitro가 스캔할 디렉터리를 추가합니다. 하위 디렉터리를 확인하여
~/server 폴더와 동일한 방식으로 등록합니다.
~/server/api, ~/server/routes, ~/server/middleware, ~/server/utils만 스캔됩니다.import { addServerScanDir, createResolver, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
meta: {
name: 'my-module',
configKey: 'myModule',
},
setup (options) {
const { resolve } = createResolver(import.meta.url)
addServerScanDir(resolve('./runtime/server'))
},
})
function addServerScanDir (dirs: string | string[], opts: { prepend?: boolean }): void
| Property | Type | Required | Description |
|---|---|---|---|
dirs | string | string[] | true | Nitro가 서버 디렉터리로 스캔하도록 등록할 디렉터리 또는 디렉터리 배열. |
opts | { prepend?: boolean } | false | import 디렉터리에 대한 옵션. prepend가 true이면, 디렉터리가 스캔 목록의 시작 부분에 추가됩니다. |
addServerScanDir를 사용해 Nitro가 스캔할 디렉터리를 추가할 수 있습니다. 이는 커스텀 서버 디렉터리를 추가하고 싶을 때 유용합니다.
import { addServerScanDir, createResolver, defineNuxtModule } from '@nuxt/kit'
export default defineNuxtModule({
meta: {
name: 'my-module',
configKey: 'myModule',
},
setup (options) {
const { resolve } = createResolver(import.meta.url)
addServerScanDir(resolve('./runtime/server'))
},
})
export function hello () {
return 'Hello from server utils!'
}
그런 다음 서버 코드에서 hello 함수를 사용할 수 있습니다.
export default defineEventHandler(() => {
return hello() // Hello from server utils!
})