2012-04-11 2 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

Что находится в файле 'users'? –

+0

Возможно, вы захотите изучить Паспорт (http://passportjs.org/). Это гибкая альтернатива everyauth, которая не использует обещаний, поэтому может быть проще отладить в вашем приложении. Я разработчик, не стесняйтесь задавать мне вопросы. –

ответ

1

У меня такая же проблема с everyauth 0.2.32. Похоже everyauth.Promise не экспортируются и сбои приложений при попытке создать экземпляр «Неопределенная» класс

Вы можете проверить, если (Promise == «неопределенный»)

0

в последних версиях everyauth вас следует использовать следующий синтаксис:

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

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

  • Нет связанных вопросов^_^