https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 에 정의된 status 외에 에러 메시지를 표시하기 위해서는 서버에서 각각 에러 메시지를 보내줘야 한다.
아래는 내가 사용하는 서버용 error code handler다.
내가 만든 건 아니고 어디서 가져온 것 같은데 출처를 모르겠다.
(감사할 뿐이다.)
'use strict';
var status = function(err) {
switch (err.code) {
case 'AUTHENTICATION_REQUIRED':
case 'AUTHENTICATION_INVALID':
case 'TOKEN_INVALID':
case 'TOKEN_EXPIRED':
case 'UNAUTHORIZED':
return 401;
case 'NOT_SELF':
case 'NOT_GROUP_OWNER':
case 'NOT_GROUP_MANAGER':
case 'NOT_GROUP_MEMBER':
case 'NOT_RELATED_TO_GROUP':
case 'ALREADY_RELATED_TO_GROUP':
case 'NOT_CARD_OWNER':
case 'NOT_ALARM_OWNER':
case 'FORBIDDEN':
return 403;
case 'USER_NOT_FOUND':
case 'GROUP_NOT_FOUND':
case 'PHOTO_NOT_FOUND':
case 'CARD_NOT_FOUND':
case 'API_NOT_FOUND':
return 404;
case 'USER_DUPLICATED':
case 'USER_MISMATCH':
case 'PASSWORD_MISMATCH':
case 'TOKEN_MISMATCH':
case 'NOT_FOR_GROUP_OWNER':
case 'CARD_ALREADY_RESPONDED':
case 'CARD_ALREADY_COMPLETED':
return 409;
case 'REQUIRED_FIELD':
case 'INVALID_FIELD':
case 'REQUIRED_PHOTO':
case 'REQUIRED_PARAM':
case 'INVALID_PARAM':
return 422;
default:
console.error(err.stack);
return 500;
}
};
exports = module.exports = function errorHandler() {
/* jshint unused: false */
return function errorHandler(err, req, res, next) {
res.status(status(err));
var error = { message: err.message };
for (var prop in err) error[prop] = err[prop];
var json = JSON.stringify({ error: error });
res.setHeader('Content-Type', 'application/json');
res.end(json);
};
};
표준STATUS CODE
http-states 메시지가 잘 정리되어 있고 변경해서 보여주는 플러그인
https://github.com/adaltas/node-http-status