Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

i18n(ko-KR): update middleware.mdx, routing.mdx, api-reference.mdx #8989

Merged
merged 14 commits into from
Aug 5, 2024
73 changes: 73 additions & 0 deletions src/content/docs/ko/guides/middleware.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,79 @@ auth 응답
validation 응답
```

## 리라이팅

<p><Since v="4.13.0" /></p>

`APIContext`는 `rewrite()`라는 메서드를 노출하는데, 이는 [Astro.rewrite](/ko/guides/routing/#리라이트)와 동일한 방식으로 작동합니다.

방문자를 새 페이지로 [리디렉션](/ko/guides/routing/#동적-리디렉션)하지 않고 다른 페이지의 콘텐츠를 표시하려면 미들웨어에서 `context.rewrite()`를 사용하세요. 이렇게 하면 새 렌더링 단계가 트리거되어 모든 미들웨어가 다시 실행됩니다.

```js title="src/middleware.js"
import { isLoggedIn } from "~/auth.js"
export function onRequest (context, next) {
if (!isLoggedIn(context) {
jsparkdev marked this conversation as resolved.
Show resolved Hide resolved
// 사용자가 로그인하지 않은 경우 `/login` 경로를 렌더링하도록 요청을 업데이트하고
// 로그인 성공 후 사용자에게 전송할 위치를 나타내는 헤더를 추가합니다.
// 미들웨어를 다시 실행합니다.
return context.rewrite(new Request("/login", {
headers: {
"x-redirect-to": context.url.pathname
}
}));
}

return next();
};
```

또한 `next()` 함수에 선택적 URL 경로 매개변수를 전달하여 새 렌더링 단계를 다시 트리거하지 않고 현재 `Request`를 리라이트할 수 있습니다. 리라이트 경로의 위치는 문자열, URL 또는 `Request`로 제공할 수 있습니다:

```js title="src/middleware.js"
import { isLoggedIn } from "~/auth.js"
export function onRequest (context, next) {
if (!isLoggedIn(context) {
jsparkdev marked this conversation as resolved.
Show resolved Hide resolved
// 사용자가 로그인하지 않은 경우 `/login` 경로를 렌더링하도록 요청을 업데이트하고
// 로그인 성공 후 사용자에게 전송할 위치를 나타내는 헤더를 추가합니다.
// 다음 미들웨어에 새 `context`를 반환합니다.
return next(new Request("/login", {
headers: {
"x-redirect-to": context.url.pathname
}
}));
}

return next();
};
```

`next()` 함수는 [`Astro.rewrite()` 함수](/ko/reference/api-reference/#astrorewrite)와 동일한 페이로드를 전달받습니다. 리라이트 경로의 위치는 문자열, URL 또는 `Request`로 제공할 수 있습니다.

[sequence()](#미들웨어-체이닝)를 통해 여러 미들웨어 함수가 체인으로 연결된 경우, `next()`에 경로를 제출하면 `Request`가 제자리에 리라이트되고 미들웨어가 다시 실행되지 않습니다. 체인의 다음 미들웨어 함수는 업데이트된 `context`와 함께 새 `Request`를 받게 됩니다:

```js title="src/middleware.js"
// 현재 URL은 https://example.com/blog

// 첫 미들웨어 함수
async function first(_, next) {
console.log(context.url.pathname) // "/blog"가 기록됩니다.
// 새 경로와 홈페이지가 리라이트됩니다.
// 다음 함수에 전달되는 업데이트된 `context`를 반환합니다.
return next("/")
}

// 현재 URL은 여전히 https://example.com/blog

// 두 번째 미들웨어 함수
async function second(context, next) {
// 업데이트된 `context`를 전달받습니다.
console.log(context.url.pathname) // "/"가 기록됩니다.
return next()
}

export const onRequest = sequence(first, second);
```

## 오류 페이지

미들웨어는 일치하는 경로를 찾을 수 없는 경우에도 주문형 렌더링된 모든 페이지에 대해 실행을 시도합니다. 여기에는 Astro의 기본 (비어있는) 404 페이지와 사용자 정의 404 페이지가 포함됩니다. 그러나 해당 코드의 실행 여부는 [어댑터](/ko/guides/server-side-rendering/)에 따라 결정됩니다. 일부 어댑터는 플랫폼별 오류 페이지를 대신 제공할 수 있습니다.
Expand Down
Loading