Как я могу определить пользовательскую ошибку

Мне нужно присвоить код / ​​идентификатор моей пользовательской ошибке:

Это когда я создаю ошибку:

var err=new Error('Numero massimo di cambi di username raggiunto');

Кто-нибудь, чтобы помочь мне понять, как я могу это сделать?

2 ответа

Определять

function MyError(code, message) {
  this.code = code;
  this.message = message;
  Error.captureStackTrace(this, MyError);
}
util.inherits(MyError, Error);
MyError.prototype.name = 'MyError';

поднимать

throw new MyError(777, 'Smth wrong');

Ловить

if (err instanceof MyError) {
  console.log(err.code, err.message);
}

Error тип может быть расширен в соответствии с документами. Вы можете определить SystemError это расширяет Error тип:

var util = require('util');

function SystemError(message, cause){
   this.stack = Error.call(this,message).stack;
   this.message = message;
   this.cause = cause;
}
util.inherits(SystemError,Error); // nodejs way of inheritance

SystemError.prototype.setCode = function(code){
   this.code = code;
   return this;
};

SystemError.prototype.setHttpCode = function(httpCode){
   this.httpCode = httpCode;
   return this;
};

module.exports = SystemError;

Теперь вы можете выбросить свою ошибку:

 var SystemError = require('./SystemError);

 fs.read('some.txt',function(err,data){
    if(err){
       throw new SystemError('Cannot read file',err).setHttpCode(404).setCode('ENOFILE');
    } else {
       // do stuff 
    }
 });

Но все это полезно только тогда, когда у вас есть центральный механизм обработки ошибок. Например, в expressjs приложение, вы можете иметь ошибку перехвата промежуточного программного обеспечения в конце:

  var express = require('express');

  var app = express();

  app.get('/cars', require('./getCars'));
  app.put('/cars', require('./putCars'));

  // error handling
  app.use( function(err, req, res, next){
     if(err instanceof SystemError){
       res.status(err.httpCode).send({
         code: err.code,
         message: err.message
       });
     } else {
       res.status(500).send({
         code: 'INTERNAL',
         message: 'Internal Server Error'
       });
     }
  });
Другие вопросы по тегам