2012-04-11 1 views
0

「未定義は関数ではない」という理由で、すべてのオートがクラッシュするのはなぜですか?

var express = require('express'), 
    everyauth = require('everyauth'), 
    util = require('util'), 
    Promise = everyauth.Promise, 
    users = require('./users'); 

everyauth.twitter 
    .consumerKey('') 
    .consumerSecret('') 
    .findOrCreateUser(function(session, accessToken, accessTokenSecret, twitterUserData) { 
    console.log('pre promise'); 
    var promise = new Promise(); 
    users.findOrCreateByTwitterData(twitterUserData, promise); 
    return promise; 
    }) 
    .redirectPath('/'); 

を次のように私のコードは、事前promise'andが、その後

pre promise 

/.../node_modules/everyauth/lib/modules/everymodule.js:348 
    throw err; 
     ^
TypeError: undefined is not a function 
    at Object._findOrCreateUser (.../test.js:12:19) 
    at Object.exec (.../node_modules/everyauth/lib/step.js:47:21) 
    at .../node_modules/everyauth/lib/stepSequence.js:26:38 
    at [object Object].fulfill (.../node_modules/everyauth/lib/promise.js:42:25) 
    at .../node_modules/everyauth/lib/stepSequence.js:29:23 
    at [object Object].fulfill (.../node_modules/everyauth/lib/promise.js:42:25) 
    at .../node_modules/everyauth/lib/modules/twitter.js:16:15 
    at passBackControl (.../node_modules/everyauth/node_modules/oauth/lib/oauth.js:359:11) 
    at IncomingMessage.<anonymous> (.../node_modules/everyauth/node_modules/oauth/lib/oauth.js:378:9) 
    at IncomingMessage.emit (events.js:88:20) 

ユーザーを次のようにクラッシュがあることのように見える」印刷している:私は同じ問題を持っている

var cradle = require('cradle'); 
var c = new cradle.Connection('...', 80, { 
    auth:{username:'admin', password:'...'} 
}); 
var users = c.database('users'); 

module.exports.findOrCreateByTwitterData = function(twitterUserData, promise) { 
    console.log('finding'); 
    users.view('docs/twitterId', {key:twitterUserData.id_str}, function (err, doc) { 
     if (err) { 
      console.log('twitter error'); 
      return; 
     } 
     if (doc) { 
      promise.fulfill(doc); 
     } 
     else { 
      var doc = { 

      }; 
     } 
     c.database('users').save(doc, function (err, res) { 
      if (err) { 
       console.log('error with users'); 
       return; 
      } 
      promise.fulfill(doc); 
     }); 
    }); 
} 
+0

'users'ファイルの内容は何ですか? –

+0

パスポート(http://passportjs.org/)を調べることができます。これは、約束事を使用しない、すべてのオートに対する柔軟な代替方法ですので、アプリケーションでデバッグする方が簡単かもしれません。私は開発者です。質問があれば私にpingをしてください。 –

答えて

1

毎回0.2.32。あなたがeveryauthあなたの最近のバージョンでは(約束==「未定義」)かどうかをチェックできる「未定義の」クラス

0

をインスタンス化しようとすると、everyauth.Promiseがエクスポートされ、アプリがクラッシュしていないよう が見えます次の構文を使用する必要があります。

.findOrCreateUser(function(session, accessToken, accessTokenSecret, twitterUserData) { 
    var promise = this.Promise(); 
    users.findOrCreateByTwitterData(twitterUserData, promise); 
    return promise; 
})