Estoy tratando de bucle a través de una matriz para comprobar si contiene algún elemento que pasa a una función determinada. Tengo que hacer esto mediante la adición de una .ninguna() el prototipo de la Matriz objeto:

Array.prototype.any = (comparator) => {
    for(let item of this){
        if(comparator(item)){
            return true;
        }
    }
    return false;
};

A continuación, llamar a la Matriz.ninguna() como:

else if(users && users.any((user) => user.userName === user.userName)){
        res.status(400).send('Username already in use');
}

Esto, sin embargo, me da el siguiente error:

TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
at Array.any (C:\dev\nodejs\testproject\dist\routes\userRoutes.js:29:39)
at C:\dev\nodejs\testproject\dist\routes\userRoutes.js:87:56
at Query.<anonymous> (C:\dev\nodejs\testproject\node_modules\mongoose\lib\model.js:3748:16)
at C:\dev\nodejs\testproject\node_modules\kareem\index.js:277:21
at C:\dev\nodejs\testproject\node_modules\kareem\index.js:131:16
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)

El error me parece que es lo que sugiere ‘esta’ en el prototipo de la función es indefinido, pero «esta» es la de los usuarios de la matriz para que lo comprobé indefinido.

No realmente seguro de lo que realmente está causando el problema, espero que puedan ayudar.

  • ¿Qué es «usuarios»? Parecería no ser un array, pero es más bien un Query objeto de la mangosta. Creo que fue algo así como var users = User.find({}). Sí?
  • user.userName === user.userName : ¿de verdad quieres decir eso?
  • Usted podría ser correcto aquí «usuarios» es, de hecho, viene de la mangosta
  • `El usuario.find({}, (err, los usuarios) => { if(err) res.enviar(500); else if(usuarios && los usuarios.cualquier((usuario) => el usuario.nombre de usuario === usuario.nombre de usuario)){ res.estado(400).enviar(‘nombre de Usuario ya está en uso»); } else{ hecho de usuario (); } });
  • Además, no puede usar Array.prototype.some()?
  • Editar tu pregunta y mostrar el código real de todo esto. También explíquele lo que usted piensa que su any método que se supone debe lograr. Creo que debe ser en lugar de utilizar una «condición de consulta» para lo que usted desea. Pero necesitamos su edición de explicar.
  • De hecho se encuentra la Matriz.el prototipo.algunos() va a lograr lo mismo aquí, también user.userName === user.userName fue un error que debería haber sido user1.userName === user.userName
  • Es, básicamente, «parece» que sólo quieren User.find({ "userName": inputUserName }).limit(1).exec(err, user) { .... if (user) { //user found }) como la forma abreviada de la lógica. Así que si algo fue realmente devuelto por la consulta, a continuación, el nombre de usuario ya existe.
  • Sí cambió a const checkUniqueUserName = (user, res, done) => { User.findOne({"userName": user.userName}, (err, user) => { if(err) res.send(500); else if(user){ res.status(400).send('Username already in use'); } else{ done(user); } }); }; parece estar funcionando ahora
  • Por favor agregar que como un respuesta entonces, no por la edición de su pregunta – que completamente invalidado el mensaje de error.
  • He añadido la respuesta, pero mi edición de la pregunta no incluyen la respuesta o cambiado el resultado. La edición la hice fija algunos otros temas que eran «ajenos» a la pregunta, después de mi edición de el mismo error tendría que aún persisten. La respuesta real es en el comentario de Neil Lunn, o al menos la mayor parte.
  • Gracias, pero la edición que hizo, al menos, quitar el código que se menciona en el mensaje de error, por eso regresé.

1 Comentario

  1. 0

    El Uso De La Matriz.el prototipo.ninguna() era innecesario como yo estaba usando la mangosta para hacer que los usuarios lo cambié a tener mangosta intentar llegar a un único usuario que tiene el secified nombre de usuario y la comprobación de si que se ha definido. Como:

    const checkUniqueUserName = (user, res, done) => {
        User.findOne({"userName": user.userName}, (err, foundUser) => {
            if(err){
                res.sendStatus(500);
                console.log(err);
            }
    
            else if(foundUser){
                res.status(400).send('Username already in use');
            }
    
            else{
                done(user);
            }
        });
    };

Dejar respuesta

Please enter your comment!
Please enter your name here