Sequelize的findAll();我不明白

findAll() from Sequelize doesn't get

本文关键字:明白 findAll Sequelize      更新时间:2023-09-26

我在MySQL中使用Sequelize。

当我运行此代码时:

usuarioService.getAll = function () {
    Usuario.findAll().then(function (users) {
        //return users;
        console.dir(users);
    });
}

我没有得到用户,而是得到:

https://i.stack.imgur.com/uLhmN.png

请帮帮我!我快疯了!

感谢

Sequelize正在返回用户中的instance对象数组。instance对象附带了许多方便的方法,允许您对其进行操作

如果只想获得以字段为键的数据,请使用get({plain: true})。例如,对于数组users[0].get({plain: true})中的第一个对象。如果你想继续使用实例,你可以使用get和你的字段名称。例如,users[0].get('nombre')

您还应该能够直接访问对象上的属性,即使它们没有被记录,例如users[0].nombre

编辑

这与最初的问题无关,而是你对另一个答案的评论。确保你是异步地做事。代码应该是:

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

然后当调用这个方法时,你会做一些类似的事情:

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

由于Sequelize使用promise,因此使用promise是最好的方法。

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

然后当调用这个方法时,你会做一些类似的事情:

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

您正在返回一个用户。

您看到的第一个部分是Sequelize正在为您执行的SQL查询。

上面写着

dataValues: 
   { usuario_id: 1,
    ... 
   }

是您的用户。findAll()应该为您提供一个包含所有用户的数组。

如果您只想返回dataValues,您可以直接传入raw: true

usuarioService.getAll = function () {
    Usuario.findAll({ raw: true }).then(function (users) {
        //return users;
        console.dir(users);
    });
}