2015-08-13 2 views
0

Я очень новичок в узле и продолжу, и я стараюсь следовать этому short introduction.Почему мой Model.find ничего не возвращает?

Я проработал детали для подключения к моей базе данных (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); 
    }); 

Что я здесь отсутствует?

ответ

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()); 
    } 
    }); 
+0

Gotcha. Большое спасибо –

1

Вы смешиваете обещания и обратные вызовы в стиле узла. Обычно вы ожидаете только (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 
    }); 
+0

Спасибо, пятно on.Accepting первый ответ, который был также верен –

Смежные вопросы