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

80
Vistas
Problemas para mover la lógica del controlador Express a una clase de servicio

Hay un controlador de usuario que maneja una solicitud GET a /usuario/ y devuelve una matriz de dos objetos JSON extraídos aleatoriamente de una colección en MongoDB.

Aquí está la respuesta que se devuelve (funciona dentro del controlador):

 [{ "name": "User 1", "pet_name": "Bob 1" }, { "name": "User 2", "pet_name": "Bob 2" }]

Quería mover la lógica de obtener información de una base de datos a una clase de servicio (por ejemplo, UserService.js) para que el controlador maneje solo la solicitud y la transmita.

Copié el código exacto y lo puse en una función dentro de la clase UserService. Pero cuando ejecuto el método en la clase, termina sin devolver nada .

usuario.controlador.js

 const UserService = require("../services/UserService"); async function getUser(req, res) { const result = await UserService.getRandomUsers(); return res.status(200).json(result); } module.exports = { getUser }

UserService.js

 const User = require("../models/User"); class UserService { async getRandomUsers() { const count = await User.count(); const rand1 = Math.floor(Math.random() * count); const rand2 = Math.floor(Math.random() * count); await User.findOne().skip(rand1).then(result1 => { let results = []; let user1 = new Object(); user1.name = result1.name; user1.pet_name = result1.pet_name; results.push(user1); User.findOne().skip(rand2).then(result2 => { let user2 = new Object(); user2.name = result2.name; user2.pet_name = result2.pet_name; results.push(user2); return results; }); }); } } module.exports = new UserService();

¿Cuál es el problema?

Además, el return res.status(200).json(results) se cambia para return results dentro de la nueva clase. No devuelve nada cuando ejecuto la solicitud GET a /usuario/.

Cuando registro los resultados en la consola al final del método de clase getRandomUser(), genera los "resultados" que contienen dos usuarios aleatorios en una matriz (como se muestra en la respuesta esperada). Pero cuando el controlador devuelve la respuesta con los resultados, no hay nada allí. Estoy confundido sobre la razón por la cual la solicitud GET no devuelve nada (¿o no está definido?). Por favor ayuda.

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

0

El método getRandomUsers() no devuelve nada, debe agregar algunas declaraciones de retorno como esta:

 async getRandomUsers() { const count = await User.count(); const rand1 = Math.floor(Math.random() * count); const rand2 = Math.floor(Math.random() * count); return await User.findOne().skip(rand1).then(result1 => { let results = []; let user1 = new Object(); user1.name = result1.name; user1.pet_name = result1.pet_name; results.push(user1); return User.findOne().skip(rand2).then(result2 => { let user2 = new Object(); user2.name = result2.name; user2.pet_name = result2.pet_name; results.push(user2); return results; }); }); }
about 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