Saltar al contenido
Meeko
Escribe para buscar en las guías y en la referencia de la API. Ábrela desde cualquier página con / o Ctrl K; muévete con las flechas y entra con Intro.
Empezar

Contenidos

En esta página

createDenoAssetReader

Sirve con Deno.open, en streaming, sólo los archivos del build listados en el manifiesto de assets, con ETag, HEAD, 304 y la política de caché de Meeko.

adaptador Desde 1.0.0 @meekojs/meeko/deno Código fuente
ts
import { createDenoAssetReader } from "@meekojs/meeko/deno";

createDenoAssetReader({ root, assets }) es el lector de archivos públicos de Deno: responde sólo a las rutas del manifiesto de assets del build, con el archivo abierto con Deno.open y enviado en streaming, y devuelve null para las demás, que nunca se buscan en el disco. Las cabeceras, HEAD, 304 y la política de caché son las de todos los adaptadores.

Uso#

ts
import { createServerApp } from "@meekojs/meeko/server";
import { createDenoAssetReader, serveDeno } from "@meekojs/meeko/deno";

const app = await createServerApp({
  manifest, load, runtime, production: true,
  assets: createDenoAssetReader({ root: new URL("./client/", import.meta.url), assets: manifest.assets ?? {} }),
});
await serveDeno(app, { handleSignals: true });

Tipo#

ts
function createDenoAssetReader(options: DenoAssetReaderOptions): AssetReader

DenoAssetReaderOptions

ts
interface DenoAssetReaderOptions {
	readonly root: string | URL
	readonly assets: AssetManifest
}

AssetReader

ts
interface AssetReader {
	get(pathname: string, request: Request): Promise<Response | null>
}

Parámetros#

Opción Tipo Descripción
root string | URL Carpeta con los archivos del manifiesto, como ruta o URL file:.
assets AssetManifest Las rutas públicas con su type, etag, size e immutable.

Valor devuelto#

Un AssetReader con get(pathname, request): null para una ruta que no está en assets o un método distinto de GET y HEAD; 304 si If-None-Match coincide, sin abrir el archivo; 200 con el cuerpo del archivo, content-type, ETag, content-length y cache-control (immutable un año para los archivos con hash, max-age=0, must-revalidate para el resto).

Ejemplos#

Permisos de lectura acotados#

sh
deno run --allow-net --allow-env --allow-read=.meeko/output/deno .meeko/output/deno/main.js

El lector sólo abre archivos bajo root, así que basta con permitir la lectura de la carpeta de salida.

Un archivo grande en streaming#

texto
GET /downloads/catalogo.pdf → 200, content-length: 18874368, el cuerpo es file.readable

Si el cliente se va, el stream se cancela y el archivo se cierra.

Errores comunes#

Permisos de lectura de otra carpeta#

Incorrectosh
deno run --allow-net --allow-env --allow-read=./public .meeko/output/deno/main.js

La primera petición a un archivo listado falla con el error de permisos de Deno al abrirlo, y la aplicación responde 500 y lo envía a onError.

Correctosh
deno run --allow-net --allow-env --allow-read=.meeko/output/deno .meeko/output/deno/main.js

Ejecutarlo en Node#

Incorrectots
await createDenoAssetReader({ root, assets }).get("/robots.txt", request); // en Node

Error: The Meeko Deno adapter requires the Deno runtime. En Node, use createNodeAssetReader.

Correctots
const assets = createNodeAssetReader({ root: fileURLToPath(new URL("./client/", import.meta.url)), assets: manifest.assets ?? {} });

Notas#

  • Seguridad. Las rutas se buscan en el manifiesto sin decodificar: ningún traversal coincide, y la clave sale del build, nunca de la petición.
  • Sólo Deno. Importar @meekojs/meeko/deno en otro runtime no falla; lo que falla es leer un archivo.

Relacionado#

¿Te sirvió esta página?

Añadir un comentario

Se envía al elegir «Sí» o «No». Solo se guardan la página, tu respuesta y el comentario: ni cookies ni datos tuyos.

0 de 2000 caracteres

Editar en GitHub: docs/reference/adapters/createdenoassetreader.md