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.
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; }); }); }