Mysql
 sql >> Database >  >> RDS >> Mysql

findAll() di Sequelize non ottiene

Sequelize restituisce un array di instance oggetti negli utenti. Un'instance l'oggetto ha una serie di metodi pratici collegati che ti consentono di agire su di esso.

Se vuoi ottenere solo i dati con i tuoi campi come chiavi, usa get({plain: true}) . Ad esempio, per il primo oggetto nell'array users[0].get({plain: true}) . Se vuoi continuare a usare le istanze, puoi semplicemente usare get con il nome del tuo campo. Ad esempio, users[0].get('nombre') .

Dovresti anche essere in grado di accedere alle proprietà direttamente sull'oggetto, anche se non sono state registrate, come users[0].nombre .

Modifica

Questo non è correlato alla domanda originale, ma al tuo commento su un'altra risposta. Assicurati di fare le cose in modo asincrono. Il codice dovrebbe essere:

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

Quindi quando chiami questo metodo dovresti fare qualcosa del tipo:

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

Dal momento che Sequelize usa le promesse, farlo usando le promesse sarebbe il modo migliore.

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

Quindi quando chiami questo metodo dovresti fare qualcosa del tipo:

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