Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

657
Vistas
Punto final de SvelteKit: conversión desde Node/Express

Nuevo en SvelteKit y trabajando para adaptar un punto final de un servidor Node/Express para hacerlo más genérico para poder aprovechar los adaptadores SvelteKit. El punto final descarga archivos almacenados en una base de datos a través de node-postgresql.

Mi punto final funcional en Node/Express se ve así:

 import stream from 'stream' import db from '../utils/db' export async function download(req, res) { const _id = req.params.id const sql = "SELECT _id, name, type, data FROM files WHERE _id = $1;" const { rows } = await db.query(sql, [_id]) const file = rows[0] const fileContents = Buffer.from(file.data, 'base64') const readStream = new stream.PassThrough() readStream.end(fileContents) res.set('Content-disposition', `attachment; filename=${file.name}`) res.set('Content-Type', file.type) readStream.pipe(res) }

Esto es lo que tengo para [filenum].json.ts en SvelteKit hasta ahora...

 import stream from 'stream' import db from '$lib/db' export async function get({ params }): Promise<any> { const { filenum } = params const { rows } = await db.query('SELECT _id, name, type, data FROM files WHERE _id = $1;', [filenum]) if (rows) { const file = rows[0] const fileContents = Buffer.from(file.data, 'base64') const readStream = new stream.PassThrough() readStream.end(fileContents) let body readStream.pipe(body) return { headers: { 'Content-disposition': `attachment; filename=${file.name}`, 'Content-type': file.type }, body } } }

¿Cuál es la forma correcta de hacer esto con SvelteKit sin crear una dependencia en Node? Según los documentos de punto final de SvelteKit ,

No interactuamos con los objetos req/res con los que podría estar familiarizado del módulo http de Node o marcos como Express, porque solo están disponibles en ciertas plataformas. En su lugar, SvelteKit traduce el objeto devuelto en lo que requiera la plataforma en la que está implementando su aplicación.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

ACTUALIZACIÓN: El error se corrigió en SvelteKit. Este es el código actualizado que funciona:

 // src/routes/api/file/_file.controller.ts import { query } from '../_db' type GetFileResponse = (fileNumber: string) => Promise<{ headers: { 'Content-Disposition': string 'Content-Type': string } body: Uint8Array status?: number } | { status: number headers?: undefined body?: undefined }> export const getFile: GetFileResponse = async (fileNumber: string) => { const { rows } = await query(`SELECT _id, name, type, data FROM files WHERE _id = $1;`, [fileNumber]) if (rows) { const file = rows[0] return { headers: { 'Content-Disposition': `attachment; filename="${file.name}"`, 'Content-Type': file.type }, body: new Uint8Array(file.data) } } else return { status: 404 } }

y

 // src/routes/api/file/[filenum].ts import type { RequestHandler } from '@sveltejs/kit' import { getFile } from './_file.controller' export const get: RequestHandler = async ({ params }) => { const { filenum } = params const fileResponse = await getFile(filenum) return fileResponse }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda