2016-11-27 1 views
4

У меня есть Коа 2 приложения, а после к/регистрации осуществляются с помощью этой функции:Mongoose асинхронными/жду с Коа застревают на поджидают Model.findOne() Exec()

import User from 'models/user'; 

export const signup = async (ctx, next) => { 
    const { email, password } = ctx.request.body; 
    try { 
    const existingUser = await User.findOne({ email }); 

    if (existingUser) { 
     ctx.body = { error: 'Email is in use' }; 
     return next(); 
    } 

    const user = new User({ 
     email, 
     password, 
    }); 
    await user.save(); 
    ctx.body = { success: true }; 
    } catch (e) { 
    next(e); 
    } 
    return next(); 
}; 

FUNTION получает правильные данные, но await User.findOne().exec(); никогда не возвращается и застревает.

Я думаю, проблема в том, что если я удалю, код выполняется нормально. Если я переключусь на Promise, как ... find().then Он тоже работает. асинхронный/ждет работают либо, потому что если я изменяю к AWAIT выборки() (для эмуляции асинхр) он работает ... но вот мое столпотворение конфигурация

{ 
    "presets" : ["latest", "stage-0"], 
    "plugins": [ 
    ["module-resolver", { 
     "root": ["./src"] 
    }] 
    ] 
} 

мангуст является версией 4.7.0

+0

Ваш код не показывает вам использование '.exec()' (хотя, вероятно, его не обязательно использовать). Кроме того, вы уверены, что это не исключение? Ваш код вызывает 'next' дважды, когда возникает исключение (один раз с аргументом ошибки, а затем с' return next'). – robertklep

+0

ah извините .. скопировал старый код .. но не работает ни ... и никаких исключений ... и уже исправил два звонка ... спасибо –

ответ

0

Я начал другое приложение и т работает в настоящее время. Не знаю, что произошло. Возможно, новая версия исправлена.

0

Я написал очень похожее приложение, но все отлично работало. Какие обещания вы используете? Я имею в виду, что вы используете собственные обещания JS или обещания Mongoose? С Mongoose обещаниям у меня были проблемы, так что я изменить его родной JS:

const mongoose = require('mongoose'); 

mongoose.Promise = Promise; // Use native Promises 

mongoose.connect(config.get('mongoose.uri'), config.get('mongoose.options')); 
... 
module.exports = mongoose; 
+0

, вы не должны запрашивать разъяснения в своем ответе, комментарии для разъяснения, если таковые необходимы. –

+0

Я начал другое приложение в эти дни ... и теперь он работает ... Не знаю, что произошло. –

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