来自Sequelize的findAll()没有得到

时间:2016-03-25 04:53:22

标签: javascript mysql sequelize.js

我正在使用Sequelize和MySQL。

当我运行此代码时:

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

而不是获取用户,我得到:

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

请帮帮我!我疯了!

由于

2 个答案:

答案 0 :(得分:4)

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使用promises,使用promises执行此操作将是最佳方式。

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

答案 1 :(得分:3)

您正在返回一位用户。

您看到的第一个位是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);
    });
}