2012-04-11 55 views
0

我的代碼如下爲什麼everyauth崩潰'undefined不是函數'?

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

'用戶'文件裏面有什麼? – 2012-04-11 13:29:18

+0

您可能需要調查護照(http://passportjs.org/)。這是對everyauth的靈活替代方案,它不使用承諾,因此在應用程序中調試可能更容易。我是開發人員,隨時可以對我提出任何問題。 – 2012-04-11 16:50:43

回答

1

我有同樣的問題everyauth 0.2.32。 貌似不被導出,應用程序崩潰everyauth.Promise當您嘗試實例化一個「未定義」類

您可以檢查(無極==「不確定」)

0
在最新版本的everyauth你

應該使用以下語法:

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