Я работаю над этим приложением некоторое время. У меня есть еще несколько модулей, которые работают нормально. У меня была тонкая проблема с этим конкретным модулем, и это супер разочаровывает. Эта проблема выглядит очень просто. Может быть, я об этом подумал. Надеюсь, кто-то скажет, что я есть. :)Метод модели Sails.js (не экземпляр)
В этом модуле я решил использовать методы из своей модели. Этот конкретный не является инстантом. Вот моя модель:
/*
* Account.js
*/
module.exports = {
connection: 'islMongo',
attributes: {
name: {
type: 'string',
required: true,
},
},
numberToName: function(accountNumber) {
Account.findOne(accountNumber).exec(function(err, a){
if (err) {
return 'err';
} else {
return 'ok';
}
});
return 'broke';
},
};
Я называю это один из моих контроллеров, как это:
var accountName = Account.numberToName(params.id);
На данный момент AccountName значение «s является„сломал“. Я не понимаю, почему это не вернет «err» или «ok». Я упростил свою фактическую функцию здесь для тестирования.
Edit:
У меня есть другие вызовы, которые работают должным образом. Например:
updateBalance: function(account, amount, callback) {
/* Accepts account id or account object */
(function _lookupAccount(afterLookup) {
if (typeof account === 'object') return afterLookup(null, account);
Account.findOne(account)
.exec(afterLookup);
})(function (err, a) {
if (err) return callback(err);
if (!a) {
err = new Error();
err.message = "Couldn't find account.";
err.status = 400;
return callback(err);
}
a.balance = parseInt(a.balance) + parseInt(amount);
a.save(callback);
});
},
Называется так:
Account.updateBalance(params.account, -2000);
определение имеет обратный вызов, но я на самом деле не использовать, потому что она не нужна. Метод работает отлично.
Sails.js documentation предоставляет примеры методов, которые не используют обратные вызовы. Они просто возвращают запрошенные данные.
// Attribute methods
getFullName: function(){
return this.firstName + ' ' + this.lastName;
},
isMarried: function() {
return !!this.spouse;
},
isEligibleForSocialSecurity: function(){
return this.age >= 65;
},
encryptPassword: function() {
}
И называется так:
if (rick.isMarried()) {
// ...
}
Что я и пытаюсь сделать с моим методом в верхней части этого поста. Похоже, что exec() часть Account.findOne() даже не вызывается.
благодарит за ваш ответ. Пожалуйста, прочитайте мой оригинальный пост. Я внес некоторые изменения. – sirEgghead
Методы могут использовать возврат, если они не являются асинхронными. Все методы БД - это то, что вам нужно использовать обратный вызов, как в updateBalance. Это основное отличие между узлами и другими языками программирования. Добавьте отладку в свой код, например sails.log (err, a), и вы увидите, выполняется ли он. Метод пишет, как это всегда будет возвращать «сломан» – Bonanza
Интересно. Благодарим вас за дополнительную помощь. Теперь я полностью перечитываю ссылку на аддоны обратного вызова. :) – sirEgghead