Bienvenido a la Comunidad de Treehouse
¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquÃ.
¿Buscas aprender algo nuevo?
Treehouse ofrece una prueba gratuita de siete dÃas para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de
Inicia tu prueba gratuita
Killeon Patterson
18,528 PuntosAccediendo a mi base de datos MongoDB
Hola,
import { MongoClient, ServerApiVersion } from mongodb;
const URI = process.env.ATLAS_URI || Espero que esto le ahorre mucho tiempo a algunas personas si se quedan atrapadas...;
const client = new MongoClient(URI, {
serverApi: {
actualiza: ServerApiVersion.v1,
strict: verdadero,
deprecationErrors: verdadero,
},
});
try {
// Conecta el cliente al servidor
await client.connect();
// EnvÃa un ping para confirmar una conexión exitosa
await client.db(admin).command({ ping: 1 });
console.log(¡Hiciste ping a tu implementación. ¡Te conectaste exitosamente a MongoDB!);
} catch (err) {
console.error(err);
}
console.log(db);
let db = client.db(test);
export default db;
Me estoy conectando exitosamente a MongoDB, pero no a mis colecciones. El nombre de la base de datos es "test" y el nombre de la colección es "menus". ¿Cómo puedo acceder a las colecciones en mi MongoDB?
4 respuestas
Rohald van Merode
JavaScript Full Stack Estudiante de Techdegree 9.277 PuntosHola Killeon Patterson 👋
Gracias por proporcionar un enlace a tu repositorio, definitivamente eso da más información sobre cómo están configuradas las cosas.
Comencemos con el problema del backend
Cuando dices "no hay colección", ¿qué quieres decir exactamente? ¿Qué está registrando la declaración console.log que añadiste de tu lado? ¿Está registrando algo como undefined? ¿O es un Collection objeto? Si es lo último y tu base de datos está configurada correctamente (los nombres de la base de datos y la colección coinciden) deberÃas estar bien.
Sin embargo, hay un par de problemas en tu backend que pueden causar tus problemas
Primero que nada en la lÃnea 23/26 debido connection.js estás exportando la colección en lugar del objeto de base de datos. Dado que actualmente estás intentando acceder a colecciones especÃficas en tus rutas, lo más fácil serÃa simplemente devolver el objeto db en su lugar. De esta manera también podrás acceder a otras colecciones a través de db en el futuro en lugar de crear y exportar otra colección.
// let db = client.db("test").collection("menus");
let db = client.db(test)
Luego en tu routes/record.js archivo hay un problema de sintaxis en la lÃnea 17 ya que actualmente estás pasando un argumento al método find. En su lugar, querrás no pasar argumentos y llamar a toArray() en lo que se devuelve desde find:
// let results = await collection.find({}.toArray());
let resultados = await collection.find().toArray();
Después de esos dos cambios deberÃas poder ver los resultados al visitar http://localhost:5050/record
Lo que me lleva al código del lado del cliente.
Como sugerà en mi último comentario, aquà no hay /menu endpoint disponible en tu API. Como no hay nada que encontrar en localhost:5050/menu obtendrás una respuesta 404.
Con la forma en que tu API está actualmente configurada en la lÃnea 10 de tu server.js archivo estás configurando el records router para que esté en la /record ruta. Querrás ajustar esto a /menu o ajustar el endpoint que estás intentando obtener en la lÃnea 49 de tu RecordList componente para que coincida con la ruta: http://localhost:5050/record/
Después de este cambio deberÃas obtener un error occurred: OK mensaje registrado en la consola. Esto es por la forma en que tu condicional está configurado con !response.ok. Al usar Axios no hay ok propiedad disponible, asà que querrás ajustar ese condicional para que sea algo como response.status !== 200 en su lugar.
¡Espero que esto te ayude a seguir adelante! 😄
Rohald van Merode
JavaScript Full Stack Estudiante de Techdegree 9.277 PuntosHola Killeon Patterson 👋
Puedes acceder a tus colecciones usando collection method que está disponible en el db objeto.
const menus = db.collection('menus');
¡Espero que esto te ayude!
Killeon Patterson
18,528 PuntosHola, Gracias por tu respuesta. Obtengo una conexión exitosa a Mongo, pero aún no tengo acceso a las colecciones. Intenté hacer console.log de la información y parece tener todas las demás piezas de información que no son la colección. Obtengo mensajes 404 para mis llamadas axios al servidor para los recursos.
export default función RecordList() {
const [menus, setRecords] = useState([]);
// Este método obtiene los registros de la base de datos.
useEffect(() => {
async función getRecords() {
const response = await axios.get('http://localhost:5050/menu/')
if (!response.ok) {
const message = `Ocurrió un error: ${response.statusText}`;
console.error(message);
return;
}
const menus = await response.json();
setRecords(menus);
}
getRecords();
return;
}, [menus.longitud]);
// Este método eliminará un registro
async función deleteRecord(id) {
await axios.get(`http://localhost:5050/menus/${id}`, {
method: DELETE,
});
const registrosNuevos = menus.filtro((el) => el._id !== id);
setRecords(registrosNuevos);
}
// Este método mapeará los registros en la tabla
función listaDeRegistros() {
return menus.map((menú) => {
return (
<Registro
menú={menú}
deleteRecord={() => deleteRecord(menú._id)}
clave={menú._id}
/>
);
});
}
¿Tienes alguna sugerencia? Gracias
Rohald van Merode
JavaScript Full Stack Estudiante de Techdegree 9.277 PuntosHola Killeon Patterson,
Es difÃcil saber qué está sucediendo solo viendo estos dos fragmentos y necesitarÃa más información/contexto para estar seguro de qué está causando estos problemas. ¿Estás recibiendo algún error al intentar acceder a la colección? ¿Cómo intentas recuperar los datos después de la lÃnea que sugerà arriba? Encontré una página sobre Recuperación de datos en la documentación de MongoDB que podrÃa ser útil.
En cuanto al 404 en el frontend, parece que la /menu ruta no existe en tu API. ¿Cómo está configurada esta ruta?
Killeon Patterson
18,528 PuntosHola Richard,
Este es el GitHub del proyecto "https://github.com/Kilosince/updateohstore/tree/main" (eliminé mi mongostring de ATLAS_URI)
Creo que el problema subyacente es el mensaje 404 que estoy recibiendo de la ruta en las lÃneas 49 y 64.
Para contexto, hice un proyecto hace un tiempo, aparentemente antes de que muchos paquetes y otras dependencias se volvieran obsoletos. Asà que estoy intentando rehacer este proyecto "https://github.com/Kilosince/PointOfSale/tree/master" con procesos más nuevos. Por ejemplo, no habÃa trabajado previamente con vite.
MongoDB es la misma que he estado usando durante algún tiempo. He ejecutado console.log(client.db("test").collection("menus")). La conexión se establece pero no veo ninguna colección. Gracias por tu tiempo.
Killeon Patterson
18,528 PuntosKilleon Patterson
18,528 PuntosRohald, Gracias 😄.