为什么我的Model.find什么都没有返回?

时间:2015-08-13 13:28:41

标签: node.js postgresql sequelize.js

我对节点和续集很新,我正试图遵循这个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);
  });

我在这里缺少什么?

2 个答案:

答案 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());
    }
  });