sql >> Base de Datos >  >> RDS >> Mysql

findAll() de Sequelize no obtiene

Sequelize está devolviendo una matriz de instance objetos en los usuarios. Una instance El objeto tiene una serie de métodos convenientes adjuntos que le permiten actuar sobre él.

Si desea obtener solo los datos con sus campos como claves, use get({plain: true}) . Por ejemplo, para el primer objeto de la matriz users[0].get({plain: true}) . Si desea seguir usando las instancias, puede usar get con el nombre de su campo. Por ejemplo, users[0].get('nombre') .

También debería poder acceder a las propiedades directamente en el objeto, incluso si no se están registrando, como users[0].nombre .

Editar

Esto no está relacionado con la pregunta original, sino con su comentario sobre otra respuesta. Asegúrate de hacer las cosas de forma asincrónica. El código debe ser:

usuarioService.getAll = function (cb) {
    Usuario.findAll().then(function (users) {
        return cb(null, users);
    }).catch(function(err) {
        return cb(err);
    });
}

Luego, al llamar a este método, haría algo como:

router.get('your_path', function(req, res, next) {
    serv.getAll(function(err, users) {
        if (err) {
            // your err handling code
        }
        // users is now a valid js array
        // could send it in res.json(users)
    });
});

o

Dado que Sequelize usa promesas, hacer esto usando promesas sería la mejor manera.

usuarioService.getAll = function () {
    return Usuario.findAll({ raw: true });
}

Luego, al llamar a este método, haría algo como:

router.get('your_path', function(req, res, next) {
    serv.getAll().then(function(users) {
        res.render('usuarios/index',{
            users: users
        })
    }).catch(function(err) {
        // your error handling code here
    });
});