navigateTo는 서버 사이드와 클라이언트 사이드 모두에서 사용할 수 있습니다. Nuxt 컨텍스트 안에서 또는 직접 호출하여 페이지 네비게이션을 수행할 수 있습니다.
navigateTo를 호출할 때는 항상 그 결과에 await를 사용하거나 return하도록 하세요.navigateTo는 Nitro 라우트 안에서는 사용할 수 없습니다. Nitro 라우트에서 서버 사이드 리다이렉트를 수행하려면 대신 sendRedirect를 사용하세요.<script setup lang="ts">
// 'to'를 문자열로 전달
await navigateTo('/search')
// ... 또는 라우트 객체로 전달
await navigateTo({ path: '/search' })
// ... 또는 쿼리 파라미터가 있는 라우트 객체로 전달
await navigateTo({
path: '/search',
query: {
page: 1,
sort: 'asc',
},
})
</script>
export default defineNuxtRouteMiddleware((to, from) => {
if (to.path !== '/search') {
// 리다이렉트 코드를 '301 Moved Permanently'로 설정
return navigateTo('/search', { redirectCode: 301 })
}
})
라우트 미들웨어 안에서 navigateTo를 사용할 때는, 미들웨어 실행 흐름이 올바르게 동작하도록 반드시 그 결과를 반환(return) 해야 합니다.
예를 들어, 아래 구현은 기대한 대로 동작하지 않습니다:
export default defineNuxtRouteMiddleware((to, from) => {
if (to.path !== '/search') {
// ❌ 이는 기대한 대로 동작하지 않습니다
navigateTo('/search', { redirectCode: 301 })
return
}
})
이 경우, navigateTo는 실행되지만 반환되지 않기 때문에 예기치 않은 동작을 유발할 수 있습니다.
navigateTo의 external 파라미터는 URL로의 네비게이션이 어떻게 처리되는지에 영향을 줍니다:
external: true 없이:external: true와 함께:<script setup lang="ts">
// 에러가 발생합니다;
// 기본적으로 외부 URL로의 네비게이션은 허용되지 않습니다
await navigateTo('https://nuxt.com')
// 'external' 파라미터를 'true'로 설정하면 성공적으로 리다이렉트됩니다
await navigateTo('https://nuxt.com', {
external: true,
})
</script>
<script setup lang="ts">
// 'https://nuxt.com'을 새 탭에서 엽니다
await navigateTo('https://nuxt.com', {
open: {
target: '_blank',
windowFeatures: {
width: 500,
height: 500,
},
},
})
</script>
export function navigateTo (
to: RouteLocationRaw | undefined | null,
options?: NavigateToOptions,
): Promise<void | NavigationFailure | false> | false | void | RouteLocationRaw
interface NavigateToOptions {
replace?: boolean
redirectCode?: number
external?: boolean
open?: OpenOptions
}
type OpenOptions = {
target: string
windowFeatures?: OpenWindowFeatures
}
type OpenWindowFeatures = {
popup?: boolean
noopener?: boolean
noreferrer?: boolean
} & XOR<{ width?: number }, { innerWidth?: number }>
& XOR<{ height?: number }, { innerHeight?: number }>
& XOR<{ left?: number }, { screenX?: number }>
& XOR<{ top?: number }, { screenY?: number }>
toType: RouteLocationRaw | undefined | null
Default: '/'
to는 리다이렉트할 평문 문자열이거나 라우트 객체가 될 수 있습니다. undefined 또는 null로 전달되면 기본값으로 '/'가 사용됩니다.
// URL을 직접 전달하면 '/blog' 페이지로 리다이렉트됩니다
await navigateTo('/blog')
// 라우트 객체를 사용하면 이름이 'blog'인 라우트로 리다이렉트됩니다
await navigateTo({ name: 'blog' })
// 라우트 객체를 사용하여 파라미터(id = 1)를 전달하면서 'product' 라우트로 리다이렉트합니다.
await navigateTo({ name: 'product', params: { id: 1 } })
options (optional)Type: NavigateToOptions
다음 속성을 받는 객체입니다:
replacebooleanfalsenavigateTo는 클라이언트 사이드에서 주어진 라우트를 Vue Router 인스턴스에 push합니다.이 동작은 `replace`를 `true`로 설정하여, 주어진 라우트가 교체(replace)되어야 함을 나타내도록 변경할 수 있습니다.
redirectCodenumber302navigateTo는 기본적으로 주어진 경로로 리다이렉트하고 리다이렉트 코드를 302 Found로 설정합니다.이 기본 동작은 다른 `redirectCode`를 제공하여 수정할 수 있습니다. 일반적으로 영구적인 리다이렉션에는 [`301 Moved Permanently`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/301)를 사용할 수 있습니다.
externalbooleanfalsetrue로 설정하면 외부 URL로의 네비게이션을 허용합니다. 그렇지 않으면, 기본적으로 외부 네비게이션이 허용되지 않기 때문에 navigateTo는 에러를 발생시킵니다.openOpenOptions다음 속성을 받는 객체입니다:
target- **Type**: `string`
- **Default**: `'_blank'`
- 리소스가 로드될 브라우징 컨텍스트의 이름을 공백 없이 지정하는 문자열입니다.
windowFeatures- **Type**: `OpenWindowFeatures`
- 다음 속성을 받는 객체입니다:
| Property | Type | Description |
|----------|---------|--------------|
| `popup` | `boolean` | 브라우저가 결정한 UI 기능을 가진 새 탭 대신 최소한의 팝업 창을 요청합니다. |
| `width` or `innerWidth` | `number` | 스크롤바를 포함한 콘텐츠 영역의 너비(최소 100픽셀)를 지정합니다. |
| `height` or `innerHeight` | `number` | 스크롤바를 포함한 콘텐츠 영역의 높이(최소 100픽셀)를 지정합니다. |
| `left` or `screenX` | `number` | 새 창의 수평 위치를 화면의 왼쪽 가장자리 기준으로 설정합니다. |
| `top` or `screenY` | `number` | 새 창의 수직 위치를 화면의 위쪽 가장자리 기준으로 설정합니다. |
| `noopener` | `boolean` | 새 창이 `window.opener`를 통해 원본 창에 접근하지 못하도록 방지합니다. |
| `noreferrer` | `boolean` | Referer 헤더가 전송되지 않도록 방지하며, 암묵적으로 `noopener`를 활성화합니다. |
**windowFeatures** 속성에 대한 더 자세한 정보는 [문서](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#windowfeatures)를 참고하세요.