我正在使用Sequelize和MySQL。
当我运行此代码时:
usuarioService.getAll = function () {
Usuario.findAll().then(function (users) {
//return users;
console.dir(users);
});
}
而不是获取用户,我得到:
http://i.stack.imgur.com/uLhmN.png
请帮帮我!我疯了!
由于
答案 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);
});
}