sql >> Databasteknik >  >> RDS >> Mysql

findAll() från Sequelize får inte

Sequelize returnerar en array med instance objekt hos användare. En instance objekt har ett antal bekvämlighetsmetoder kopplade till det som gör att du kan agera på det.

Om du bara vill få data med dina fält som nycklar, använd get({plain: true}) . Till exempel, för det första objektet i arrayen users[0].get({plain: true}) . Om du vill fortsätta använda instanserna kan du bara använda get med namnet på ditt fält. Till exempel, users[0].get('nombre') .

Du bör också kunna komma åt egenskaperna direkt på objektet, även om de inte loggas, såsom users[0].nombre .

Redigera

Detta är inte relaterat till den ursprungliga frågan, utan din kommentar till ett annat svar. Se till att du gör saker asynkront. Koden ska vara:

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

När du sedan anropar den här metoden skulle du göra något i stil med:

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

eller

Eftersom Sequelize använder löften skulle det vara det bästa sättet att göra detta med löften.

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

När du sedan anropar den här metoden skulle du göra något i stil med:

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


  1. Skapa en nummertabell i MySQL

  2. Bestäm maxlängd tillåten i en kolumn i mysql

  3. MySQL tät rankning för varje grupp/partition

  4. Välj om det finns annat infoga?