Estoy atascado para encontrar al usuario por id usando la función de búsqueda. Mi función getUsers() devuelve una matriz de objetos.
function getUsers(filter, limit, offset) { let userList = []; for (let i = 0; i < 100; i++) { let user = {}; user.id = i; user.firstname = 'firstname_' + i; user.lastname = 'lastname' + i; user.email = user.userId + "@hotmail.com"; userList.push(user); } return JSON.stringify(userList); }y quiero encontrar un usuario por su id aquí pero muestra Datos no encontrados:
app.get('/shops/:shopid/users/:userId', (req, res) => { let users = getUsers(undefined, undefined, undefined); const result = users.find(u => u.id === parseInt(req.params.userId)); if(!result) res.status(404).send('Data not found'); res.send(result); });Porque getUsers devuelve una cadena JSON en lugar de una matriz. El método de find solo funciona en matrices. Así que tienes algunas opciones.
Opción 1: simplemente devuelva la matriz en la función getUSers
function getUsers(filter, limit, offset) { let userList = []; for (let i = 0; i < 100; i++) { let user = {}; user.id = i; user.firstname = 'firstname_' + i; user.lastname = 'lastname' + i; user.email = user.userId + "@hotmail.com"; userList.push(user); } return userList; } Opción 2: use JSON.parse cuando llame a getUsers
app.get('/shops/:shopid/users/:userId', (req, res) => { let users = JSON.parse(getUsers(undefined, undefined, undefined)); const result = users.find(u => u.id === parseInt(req.params.userId)); if(!result) res.status(404).send('Data not found'); res.send(result); }); getUsers() devuelve una string , pero desea tener una matriz de usuarios, no una cadena, porque una string no tiene un método find() .
Simplemente elimine JSON.stringify() en su método getUsers() y funcionará.
function getUsers(filter, limit, offset) { let userList = []; for (let i = 0; i < 100; i++) { let user = {}; user.id = i; user.firstname = "firstname_" + i; user.lastname = "lastname" + i; user.email = user.userId + "@hotmail.com"; userList.push(user); } // remove a list instead of a string return userList; } let users = getUsers(); console.log(users); const result = users.find((u) => u.id === 0); if (!result) console.log(`User ${result.id} was not found!`); else console.log(`User ${result.id} was found!`); No tiene sentido llamar explícitamente a una función con todos los parámetros undefined , ya que automáticamente no estarán undefined si no los proporciona, por lo que getUsers() es suficiente.
Tu método getUsers() se puede hacer más conciso y legible usando la función map() y las cadenas de plantilla .
function getUsers(filter, limit, offset) { return [...new Array(100)].map((_, index) => ({ id: index, firstname: `firstname_${index}`, lastname: `lastname_${index}`, email: `${index}@hotmail.com`, })) } let users = getUsers(); console.log(users); const result = users.find((u) => u.id === 0); if (!result) console.log(`User ${result.id} was not found!`); else console.log(`User ${result.id} was found!`); .as-console-wrapper { max-height: 100% !important; top: 0; }