Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

findAll() do Sequelize não obtém


Sequelize está retornando uma matriz de instance objetos em usuários. Uma instance objeto tem vários métodos de conveniência anexados a ele que permitem que você aja sobre ele.

Se você deseja obter apenas os dados com seus campos como chaves, use get({plain: true}) . Por exemplo, para o primeiro objeto na matriz users[0].get({plain: true}) . Se você quiser continuar usando as instâncias, basta usar get com o nome do seu campo. Por exemplo, users[0].get('nombre') .

Você também deve poder acessar as propriedades diretamente no objeto, mesmo que elas não estejam sendo registradas, como users[0].nombre .

Editar


Isso não está relacionado à pergunta original, mas ao seu comentário em outra resposta. Certifique-se de estar fazendo as coisas de forma assíncrona. O código deve ser:
usuarioService.getAll = function (cb) {
    Usuario.findAll().then(function (users) {
        return cb(null, users);
    }).catch(function(err) {
        return cb(err);
    });
}

Então, ao chamar esse método, você faria 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)
    });
});

ou


Como o Sequelize usa promessas, fazer isso usando promessas seria a melhor maneira.
usuarioService.getAll = function () {
    return Usuario.findAll({ raw: true });
}

Então, ao chamar esse método, você faria 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
    });
});