私はしばらくの間このアプリケーションで作業してきました。私は、すべてうまく動作する他のいくつかのモジュールを持っています。私はこの特定のモジュールで何度も問題を抱えていて、それは非常に苛立っています。この問題は非常に単純です。たぶん私はそれを考えています。うまくいけば、誰かが私がいると言うでしょう。 :)Sails.jsモデルメソッド(非インスタンス)
このモジュールでは、私のモデルからメソッドを使用することに決めました。この特定のものはインスタンス化されていません。 『壊した』
var accountName = Account.numberToName(params.id);
ACCOUNTNAMEの値はこの時点で:
/*
* 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';
},
};
私はこのような私のコントローラのいずれかから、それを呼び出す:ここに私のモデルです。私はなぜそれが "間違って"または "ok"を返さないのか理解していない。実際の機能をテストのために簡略化しました。
編集:
私は正常に動作し、他の電話を持っています。例えば:
Account.updateBalance(params.account, -2000);
定義がコールバックを持っていますが、それが必要とされていないので、私は実際には1つを使用していない:
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);
});
},
は、このように呼ばれています。メソッドは正常に動作します。
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
メソッドは、非同期でない場合にreturnを使用できます。すべてのDBメソッドはupdateBalanceのようにコールバックを使用する必要があります。これは、ノードと他のプログラミング言語のコアとなる違いです。 sails.log(err、a)のようなコードにデバッグを追加すると、実行されているかどうかがわかります。このようなメソッドの書き込みは常に '破損'を返します – Bonanza
興味深い。追加のご協力ありがとうございます。私はあなたのコールバック地獄のリンクを徹底的に読んでいます。 :) – sirEgghead