From c379a89cb01dc5d928c2b6a0abb07a154ba82331 Mon Sep 17 00:00:00 2001 From: liruifengv Date: Thu, 18 Jan 2024 13:50:05 +0800 Subject: [PATCH] i18n(zh-cn): Update adapter-reference.mdx --- .../zh-cn/reference/adapter-reference.mdx | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/content/docs/zh-cn/reference/adapter-reference.mdx b/src/content/docs/zh-cn/reference/adapter-reference.mdx index e7030a2aadd53..d080e95aca23a 100644 --- a/src/content/docs/zh-cn/reference/adapter-reference.mdx +++ b/src/content/docs/zh-cn/reference/adapter-reference.mdx @@ -192,7 +192,7 @@ 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 路由同样适用。 @@ -200,13 +200,39 @@ export function start(manifest) { 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 { @@ -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 应用的路由规则。