Skip to content

[nodejs]http status code, error message

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

https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C#3xx_.28.EB.A6.AC.EB.8B.A4.EC.9D.B4.EB.A0.89.EC.85.98_.EC.99.84.EB.A3.8C.29

http-states 메시지가 잘 정리되어 있고 변경해서 보여주는 플러그인
https://github.com/adaltas/node-http-status

Published inNodeJs