2016-06-14 1 views
1

돛 프레임 워크에 공동 모듈을 사용하여 코딩하고 있습니다.Node.js의 co 모듈을 사용하여 예외를 잡아낼 수 있습니까?

InvalidError를 catch하려고하지만 오류 로그에 '정의되지 않음'이 표시됩니다.

이 코드는 어떻게 수정합니까?

Co 모듈이 ErrorType 사양을 잡을 수 없습니까 ??

detail: function (req, res) { 
    co(function *() { 
    let errors = []; 
    const text = req.param('text'); 

    if (text.length <= 0) { 
     throw new InvalidError('text is required'); 
    } 

    }).catch((InvalidError, err) => { 
    sails.log.warn(err); 
    errors.push(err.message); 
    req.flash('errors', errors); 
    res.redirect('/somewhere/view'); 
    }).catch((Error, err) => { 
    sails.log.error(err); 
    res.serverError(err); 
    }); 
} 

오류 로그는 catch 방법은 단 하나의 인자를 여기

warn: undefined 
error: undefined 
error: Sending empty 500 ("Server Error") response 

답변

1

입니다 : err. 시도해보십시오 :

.catch(err => { 
    sails.log.warn(err); 
    errors.push(err.message); 
    req.flash('errors', errors); 
    res.redirect('/somewhere/view'); 
}) 
+0

귀하의 조언에 감사드립니다 다음 standard catch method 당신은 자신이 그렇게해야합니다, error type filtering가 없습니다! 시도해 볼게! –

1

당신은 Bluebird를 사용하지 않고 있습니까?

.catch(err => { 
    if (err instanceof InvalidError) { 
    sails.log.warn(err); 
    errors.push(err.message); 
    req.flash('errors', errors); 
    res.redirect('/somewhere/view'); 
    } else if (err instanceof Error) { 
    sails.log.error(err); 
    res.serverError(err); 
    } else { 
    console.error("You've thrown a non-error! Shame on you!"); 
    } 
}); 
+0

귀하의 조언에 감사드립니다! 나는 Bluebird를 사용하고있다. Bluebird를 사용하는 경우 다른 옵션을 선택할 수 있습니까 ?? –

+0

음 * 당신 *은 블루 버드를 사용하고 있을지 모르지만,'co'은 :-)하지 않습니다. 글로벌'Promise' 변수를 블루 버드 구현으로 덮어 쓸 수도 있고,'co (...)'에 의해 반환 된 약속을 블루 버드 하나는 [여기] (http://stackoverflow.com/a/24315410/1048572) 및 [there] (http://stackoverflow.com/a/30934440/1048572) – Bergi

관련 문제