2015-10-12 3 views
0

Я изо всех сил пытаюсь понять, что не так со следующими запросами. Я использую mongoose 4.1.10 и mongodb 3.0.6.mongoose не разрешает запросы

passport.use("local-signup", new passportLocal.Strategy({ 
    // by default, local strategy uses username and password, we will override with email 
    usernameField : 'email', 
    passwordField : 'password' 
    //passReqToCallback : true // allows us to pass back the entire request to the callback 
}, (username, password, done) => { 
    co(function *() { 
     try { 
      const user = yield User.findOne({ "local.email": username }); 

      if (user) { 
       return done(null, false); 
      } 
      else { 
       const newUser = new User(); 

       newUser.local.email = username; 
       yield newUser.save(); 
      } 
     } 
     catch(ex) { 
      done(ex); 
     } 
    }).then((user) => { 
     done(null, user); 
    }); 
})); 

Подробнее User.findOne({ "local.email": username }); не разрешается.

Я даже попытался использовать подход обратного вызова, но снова не получаю никаких результатов.

+0

«сделано» в другом месте? вы должны вернуть значение из генератора или выбросить ошибку –

+0

Посмотрите на обновленный вопрос. На самом деле, ты не прав; Я получаю значения от генератора. Вам не нужно явно указывать оператор return. Фактически, вы должны опустить возвращаемые значения. Лучше использовать 'yield' для этого – ppoliani

+0

. Я не уверен, что вы хотите называть' done() 'из вашего' then() '. Кажется, что код как есть, иногда вызывает 'done()' дважды. Один раз из генератора, а затем снова из then() –

ответ

0

User.findOne({ "local.email": username }) возвращает запрос, вам необходимо позвонить .exec(), чтобы вернуть Promise, больше информации в docs.

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