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

237
Vistas
SvelteKit: ¿Cómo llamar a mongodb sin usar puntos finales?

Quiero llamar a mi base de datos, pero no quiero que los usuarios finales puedan acceder a ella yendo al punto final de la API que configuré. Me preguntaba cómo podría simplemente llamar a mi base de datos desde un archivo en la carpeta lib y simplemente devolver los datos allí. Cuando lo pruebo me sale el error global not defined :

lib/db.js:

 import dotenv from "dotenv"; dotenv.config(); import { MongoClient } from "mongodb"; const uri = process.env["MONGODB_URI"]; const options = { useUnifiedTopology: true, useNewUrlParser: true, }; let client; let clientPromise; if (!uri) { throw new Error("Please add your Mongo URI to .env.local"); } if (process.env["NODE_ENV"] === "development") { if (!global._mongoClientPromise) { client = new MongoClient(uri, options); global._mongoClientPromise = client.connect(); } clientPromise = global._mongoClientPromise; } else { client = new MongoClient(uri, options); clientPromise = client.connect(); } export default clientPromise;

rutas/elementos/index.js:

 import clientPromise from "$lib/db"; export async function get() { const client = await clientPromise; const db = client.db(); const data = await db.collection("items").find({}).toArray(); const items = data.map(({ name }) => ({ name })); if (items) { return { body: { items, }, }; } }

Mi intento: lib/stores/items.js

 import clientPromise from "$lib/db"; import { writable } from "svelte/store"; export const items= writable([]); const fetchItems = async () => { const client = await clientPromise; const db = client.db(); const data = await db.collection("items").find({}).toArray(); const items = data.map(({ name }) => ({ name })); substances.set(items); }; fetchItems();

Probar el código anterior en varios lugares siempre arroja un error global not defined en el cliente.

Encontré una pregunta de alguien con el mismo problema, pero no pude averiguar cómo crear un archivo auxiliar.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

La protección de la API se realiza en el lado del back-end. Por lo general, es un servidor (como NodeJS) o herramientas Nginx/Apache (proxy, etc.). Básicamente, está buscando el tema Política de seguridad de contenido, que es vaporoso pero no está relacionado con SvelteKit.

Por cierto, llamar a DB directamente desde el front-end no sería seguro y no es posible.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Para obtener datos de cualquier base de datos, debe crear enpoint

Para la autenticación de usuario, puede crear un handle de control:

 export async function handle({ request, resolve }) { let user = await authenticate(request) request.locals.user = user request.locals.isAuthenticated = !!user if (request.path.startsWith('/api')) { if (!user) { return { status: 401, body: JSON.stringify({ error: { message: 'Unauthorized' } }) } } const response = await resolve(request) return response }
about 4 years ago · Juan Pablo Isaza 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