Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 44 additions & 4 deletions src/content/docs/zh-cn/reference/adapter-reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -192,21 +192,47 @@ export function start(manifest) {

该模块提供以下几个方法:

##### `app.render(request, { routeData, locals })`
##### `app.render(request: Request, options?: RenderOptions)`

此方法用于匹配符合请求的 Astro 页面,并返回一个 Promise 对象给 [Response](https://developer.mozilla.org/zh-CN/docs/Web/API/Response) 。该方法对于不渲染页面的 API 路由同样适用。

```js
const response = await app.render(request);
```

方法拥有一个必传参数 `request`,和一个传入 [`routeData`](/zh-cn/reference/integrations-reference/#routedata-类型参考) 以及 [`locals`](/zh-cn/reference/api-reference/#astrolocals) 的可选参数。
##### `RenderOptions`

如果你已经明确需要渲染的路由,可以通过传入 `routeData` 参数,跳过内部调用 [`app.match`](#appmatchrequest) 进行匹配的步骤
`app.render()` 方法接受一个必填的 `request` 参数,以及一个可选的 `RenderOptions` 对象,用于 [`addCookieHeader`](#addcookieheader)、[`clientAddress`](#clientaddress)、[`locals`](#locals) 和 [`routeData`](#routedata)

下方示例尝试解析 `x-private-header` 请求头,并将其传入 `locals` 中。在此之后,它就可以作为参数被任意[中间件](/zh-cn/guides/middleware/)使用了。
###### `addCookieHeader`

是否自动将 `Astro.cookie.set()` 写入的所有 cookie 添加到响应头中。

当设置为 `true` 时,它们将作为逗号分隔的键值对添加到响应的 `Set-Cookie` 头中。你可以使用标准的 `response.headers.getSetCookie()` API 来单独读取它们。
当设置为 `false`(默认值)时,这些 cookie 只能从 `App.getSetCookieFromResponse(response)` 中获取。

```js
const response = await app.render(request, { addCookieHeader: true });
```

###### `clientAddress`

该客户端 IP 地址将作为 [`Astro.clientAddress`](/zh-cn/reference/api-reference/#astroclientaddress) 在页面中可用,并作为 API 路由和中间件中的 `ctx.clientAddress`。

下面的示例读取 `x-forwarded-for` 头,并将其作为 `clientAddress` 传递。该值将作为 `Astro.clientAddress` 提供给用户。

```js "clientAddress"
const clientAddress = request.headers.get("x-forwarded-for");
const response = await app.render(request, { clientAddress });
```

###### `locals`

[`context.locals` 对象](/zh-cn/reference/api-reference/#contextlocals) 用于在请求的生命周期中存储和访问信息。

下面的示例读取名为 `x-private-header` 的头,并尝试将其解析为对象并将其传递给 `locals`,然后可以将其传递给任何 [中间件函数](/zh-cn/guides/middleware/)。

```js "locals"
const privateHeader = request.headers.get("x-private-header");
let locals = {};
try {
Expand All @@ -218,6 +244,20 @@ try {
}
```

###### `routeData`

如果你已经知道要渲染的路由,请为 [`routeData`](/zh-cn/reference/integrations-reference/#routedata-类型参考) 提供一个值。这样做将绕过内部调用 [`app.match`](#appmatchrequest) 来确定要渲染的路由。

```js "routeData"
const routeData = app.match(request);
if (routeData) {
return app.render(request, { routeData });
} else {
/* 特定于适配器的 404 响应 */
return new Response(..., { status: 404 });
}
```

##### `app.match(request)`

该方法用于判断请求是否匹配 Astro 应用的路由规则。
Expand Down