2014-10-16 3 views
2

은 그 아래 콜백 내 수선 모델에 붙여 넣은 수정하여는 sailsjs/nodejs 오류 개체

클라이언트에게 내가 그 입술 때문에 오류 개체의 상태를 수정하려고 시도하고있어 꽤 메시지를주기 위해 .negotiate (err)는 badRequest로 응답합니다. 하지만 내 error.status = 400은 무시되고 res.negotiate에 전달되었을 때 여전히 500 오류가 반환됩니다 (잘못된 요청 대신 서버 오류가 발생 함).

나는이 문서

http://sailsjs.org/#/documentation/reference/res/res.negotiate.html https://docs.nodejitsu.com/articles/errors/what-is-the-error-object http://massalabs.com/dev/2013/10/17/handling-errors-in-nodejs.html

생각, 버그 떨어져 일하고 있어요?

beforeDestroy: function(criteria, next){ 
    var error = new Error('This shift has people scheduled and can not be deleted.'); 
    error.type = 'user'; 
    error.status = 400; 
    return next(error); 
} 

또한 서버 오류가 발생해도 메시지가 반환됩니다. 이 경우 "이 교대 근무자가 있습니다 ..."오류가 반환 된 개체에서 찾을 수 없습니다? 수정되지 않은 응답 페이지를 사용하고 있는데 이유는 알지 못합니다.

이것은 클라이언트로 반환되는 오류 개체입니다. 협상 응답의 소스를 보면

error: "E_UNKNOWN" 
raw: {} 
status: 500 
summary: "Encountered an unexpected error" 

답변

0

, 400 응답이 반환되어야 함을 나타납니다

'node_modules\sails\lib\hooks\responses\defaults\negotiate.js' 

try { 

    statusCode = err.status || 500; 

    // Set the status 
    // (should be taken care of by res.* methods, but this sets a default just in case) 
    res.status(statusCode); 

    } catch (e) {} 

    // Respond using the appropriate custom response 
    if (statusCode === 403) return res.forbidden(body); 
    if (statusCode === 404) return res.notFound(body); 
    if (statusCode >= 400 && statusCode < 500) return res.badRequest(body); 

나는 그것을에서 호출되는 확인하기 위해 협상 응답에서 브레이크 포인트를 설정 제안 beforeDestroy 모델 라이프 사이클 콜백