Mysql
 sql >> Datenbank >  >> RDS >> Mysql

findAll() von Sequelize bekommt nicht

Sequelize gibt ein Array von instance zurück Objekte in Benutzern. Eine instance -Objekt hat eine Reihe praktischer Methoden, mit denen Sie darauf reagieren können.

Wenn Sie nur die Daten mit Ihren Feldern als Schlüssel erhalten möchten, verwenden Sie get({plain: true}) . Zum Beispiel für das erste Objekt im Array users[0].get({plain: true}) . Wenn Sie die Instanzen weiterhin verwenden möchten, können Sie einfach get mit dem Namen Ihres Felds verwenden. Beispiel:users[0].get('nombre') .

Sie sollten auch direkt auf die Eigenschaften des Objekts zugreifen können, selbst wenn sie nicht protokolliert werden, wie z. B. users[0].nombre .

Bearbeiten

Dies bezieht sich nicht auf die ursprüngliche Frage, sondern auf Ihren Kommentar zu einer anderen Antwort. Stellen Sie sicher, dass Sie die Dinge asynchron ausführen. Der Code sollte lauten:

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

Dann würden Sie beim Aufrufen dieser Methode so etwas tun:

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

oder

Da Sequelize Promises verwendet, wäre die Verwendung von Promises der beste Weg.

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

Dann würden Sie beim Aufrufen dieser Methode so etwas tun:

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