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(es): update middleware #8985

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
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
69 changes: 69 additions & 0 deletions src/content/docs/es/guides/middleware.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
---
import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro';
import { Steps } from '@astrojs/starlight/components';
import Since from '~/components/Since.astro';

Un **Middleware** te permite interceptar las solicitudes y respuestas e inyectar comportamientos dinámicamente cada vez que una página o endpoint está a punto de ser renderizado. Esta renderización se produce en tiempo de compilación para todas las páginas prerenderizadas, pero se produce cuando se solicita la ruta para las páginas renderizadas bajo demanda, lo que permite [características adicionales de SSR como cookies y encabezados](/es/guides/server-side-rendering/#características-de-renderización-bajo-demanda) disponibles.

Expand Down Expand Up @@ -198,6 +199,74 @@
respuesta de autenticación
respuesta de validación
```
## Rewriting
## Reescritura

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

El `APIContext` expone un método llamado `rewrite()` que funciona de la misma manera que [Astro.rewrite](/es/guides/routing/#rewrites).

Check failure on line 207 in src/content/docs/es/guides/middleware.mdx

View workflow job for this annotation

GitHub Actions / Check Links

Broken fragment link in src/content/docs/es/guides/middleware.mdx, line 207: The linked page does not contain a fragment with the name "#rewrites". Available fragments: #theme-icons, #gradient, #starlight__sidebar, #starlight__mobile-toc, #starlight__on-this-page--mobile, #starlight__on-this-page, #_top, #navegando-entre-páginas, #rutas-estáticas, #rutas-dinámicas, #modo-estático-ssg, #parámetros-rest, #ejemplo-páginas-dinámicas-en-múltiples-niveles, #modo-servidor-ssr, #modificando-el-ejemplo-slug-para-ssr, #redirecciones, #redirecciones-configuradas, #redirecciones-dinámicas, #orden-de-prioridad-de-rutas, #paginación, #la-prop-page, #referencia-completa-de-la-api, #paginación-anidada, #excluyendo-páginas, #docsearch-lvl0, #issueqhzsag, #ideaqhzsag, #otherqhzsag, #textareaqhzsag

Usa `context.rewrite()` dentro del middleware para mostrar el contenido de una página diferente sin [redirigir](/es/guides/routing/#redirecciones-dinámicas) a tu visitante a una nueva página. Esto desencadenará una nueva fase de renderizado, lo que hará que cualquier middleware se vuelva a ejecutar.

```js title="src/middleware.js"
import { isLoggedIn } from "~/auth.js"
export function onRequest (context, next) {
if (!isLoggedIn(context)) {
// Si el usuario no ha iniciado sesión, actualiza la solicitud para renderizar la ruta `/login` y
// agrega un encabezado para indicar a dónde se debe enviar al usuario después de un inicio de sesión exitoso.
// Reejecuta el middleware.
return context.rewrite(new Request("/login", {
headers: {
"x-redirect-to": context.url.pathname
}
}));
}

return next();
};
```
Puedes pasarle a la función `next()` un parámetro de ruta de URL opcional para reescribir la `Request` actual sin volver a desencadenar una nueva fase de renderizado. La ubicación de la ruta de reescritura se puede proporcionar como una cadena, URL o `Request`:
```js title="src/middleware.js"
import { isLoggedIn } from "~/auth.js"
export function onRequest (context, next) {
if (!isLoggedIn(context)) {
// Si el usuario no ha iniciado sesión, actualiza la solicitud para renderizar la ruta `/login` y
// agrega un encabezado para indicar a dónde se debe enviar al usuario después de un inicio de sesión exitoso.
// Regresa un nuevo `context` a cualquier middleware siguiente.
return next(new Request("/login", {
headers: {
"x-redirect-to": context.url.pathname
}
}));
}

return next();
};
```
La función `next()` acepta el mismo payload que [la función `Astro.rewrite()`](/es/reference/api-reference/#astrorewrite). La ubicación de la ruta de reescritura se puede proporcionar como una cadena, URL o `Request`.

Check failure on line 246 in src/content/docs/es/guides/middleware.mdx

View workflow job for this annotation

GitHub Actions / Check Links

Broken fragment link in src/content/docs/es/guides/middleware.mdx, line 246: The linked page does not contain a fragment with the name "#astrorewrite". Available fragments: #theme-icons, #gradient, #starlight__sidebar, #starlight__mobile-toc, #starlight__on-this-page--mobile, #starlight__on-this-page, #_top, #astro-global, #astroglob, #archivos-markdown, #archivos-astro, #otros-archivos, #astroprops, #astroparams, #astrorequest, #astroresponse, #astrocookies, #has, #set, #delete, #headers, #astrocookie, #value, #json, #number, #boolean, #cookiegetoptions, #decode, #cookiesetoptions, #domain, #expires, #httponly, #maxage, #path, #samesite, #secure, #encode, #astroredirect, #astrocanonicalurl, #astrourl, #astroclientaddress, #astrosite, #astrogenerator, #astroslots, #astroslotshas, #astroslotsrender, #astroself, #astrolocals, #astropreferredlocale, #astropreferredlocalelist, #astrocurrentlocale, #contexto-del-endpoint, #contextlocals, #contextparams, #contextprops, #contextrequest, #contextcookies, #contexturl, #contextclientaddress, #contextsite, #contextgenerator, #contextredirect, #getstaticpaths, #params, #transferencia-de-datos-con-props, #paginate, #la-prop-de-paginación-page, #pagedata, #pagestart, #pageend, #pagesize, #pagetotal, #pagecurrentpage, #pagelastpage, #pageurlcurrent, #pageurlprev, #pageurlnext, #importmeta, #imágenes-astroassets, #getimage, #colecciones-de-contenido-astrocontent, #definecollection, #type, #schema, #reference, #getcollection, #getentry, #getentries, #getentrybyslug, #tipo-de-entrada-de-la-colección, #id, #collection, #data, #slug, #body, #render, #otros-tipos-de-colecciones-de-contenido, #collectionkey, #contentcollectionkey, #datacollectionkey, #schemacontext, #middleware-astromiddleware, #onrequest, #next, #sequence, #createcontext, #tryserializelocals, #internacionalización-astroi18n, #getrelativelocaleurl, #getabsolutelocaleurl, #getrelativelocaleurllist, #getabsolutelocaleurllist, #getpathbylocale, #getlocalebypath, #redirecttodefaultlocale, #redirecttofallback, #notfound, #middleware, #requesthaslocale, #componentes-incorporados, #code-, #fragment-, #prism-, #tab-1080, #tab-1081, #tab-1082, #tab-panel-1080, #tab-panel-1081, #tab-panel-1082, #image-, #propiedades, #picture-, #propiedades-1, #formats, #fallbackformat, #pictureattributes, #content-, #viewtransitions-, #debug-, #docsearch-lvl0, #issue2i7igz3, #idea2i7igz3, #other2i7igz3, #textarea2i7igz3
Cuando tienes múltiples funciones de middleware encadenadas a través de [sequence()](#encadenando-el-middleware), enviar una ruta a `next()` reescribirá la `Request` en su lugar y el middleware no se ejecutará de nuevo. La siguiente función de middleware en la cadena recibirá la nueva `Request` con su `context` actualizado:
```js title="src/middleware.js"
// URL actual es https://example.com/blog

// Primera función de middleware
async function first(_, next) {
console.log(context.url.pathname) // esto registrará "/blog"
// Reescribe a una nueva ruta, la página de inicio
// Regresa un `context` actualizado que se pasa a la siguiente función
return next("/")
}

// URL actual sigue siendo https://example.com/blog

// Segunda función de middleware
async function second(context, next) {
// Recibe un `context` actualizado
console.log(context.url.pathname) // esto registrará "/"
return next()
}

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

## Páginas de error

Expand Down
Loading