Mysql
 sql >> Base de données >  >> RDS >> Mysql

findAll() de Sequelize n'obtient pas

Sequelize renvoie un tableau de instance objets dans les utilisateurs. Une instance objet a un certain nombre de méthodes pratiques qui vous permettent d'agir dessus.

Si vous souhaitez obtenir uniquement les données avec vos champs comme clés, utilisez get({plain: true}) . Par exemple, pour le premier objet du tableau users[0].get({plain: true}) . Si vous souhaitez continuer à utiliser les instances, vous pouvez simplement utiliser get avec le nom de votre champ. Par exemple, users[0].get('nombre') .

Vous devriez également pouvoir accéder aux propriétés directement sur l'objet, même si elles ne sont pas enregistrées, telles que users[0].nombre .

Modifier

Ce n'est pas lié à la question d'origine, mais à votre commentaire sur une autre réponse. Assurez-vous que vous faites les choses de manière asynchrone. Le code devrait être :

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

Ensuite, lors de l'appel de cette méthode, vous feriez quelque chose comme :

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

Étant donné que Sequelize utilise des promesses, le faire en utilisant des promesses serait le meilleur moyen.

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

Ensuite, lors de l'appel de cette méthode, vous feriez quelque chose comme :

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