我对节点和续集很新,我正试图遵循这个short introduction。
我已经完成了部分连接到我的数据库(postgres)。我还定义了一个模型:
var User = sequelize.define('User', {
username: Sequelize.STRING,
password: Sequelize.STRING
});
我已经成功地同步了该方案并创建了实例。但是当我尝试使用以下数据从数据库中读取时:
User
.find({ where: { username: 'john-doe' } })
.then(function(err, johnDoe) {
if (!johnDoe) {
console.log('No user with the username "john-doe" has been found.');
} else {
console.log('Hello ' + johnDoe.username + '!');
console.log('All attributes of john:', johnDoe.get());
}
});
该实例确实存在,但我只看到“没有用户...”消息。它生成的查询似乎是正确的,当我手动尝试时,返回的结果是我期望看到的。
使用相同的查询我可以这样做,这也有效:
sequelize.query("SELECT * FROM my_user_table where username='john-doe'", { type: sequelize.QueryTypes.SELECT})
.then(function(items) {
// We don't need spread here, since only the results will be returned for select queries
console.log(items);
});
我在这里缺少什么?
答案 0 :(得分:2)
您正在混合承诺和节点式回调。通常,当您将回调传递给原始函数时,您只需要(err, results)
。如果您致电then
,您正在处理承诺,并且只应该期待结果。您应该致电catch
以获取任何错误。
User
.find({ where: { username: 'john-doe' } })
.then(function(johnDoe) {
if (!johnDoe) {
console.log('No user with the username "john-doe" has been found.');
} else {
console.log('Hello ' + johnDoe.username + '!');
console.log('All attributes of john:', johnDoe.get());
}
})
.catch(function(err) {
// Error handling here
});
答案 1 :(得分:1)
实际上,你太近了。但是,您不得在then
方法上使用参数进行错误处理。
所以你必须使用如下;
User
.findOne({ where: { username: 'john-doe' } })
.then(function(johnDoe) {
if (!johnDoe) {
console.log('No user with the username "john-doe" has been found.');
} else {
console.log('Hello ' + johnDoe.username + '!');
console.log('All attributes of john:', johnDoe.get());
}
});