Как я могу определить пользовательскую ошибку
Мне нужно присвоить код / идентификатор моей пользовательской ошибке:
Это когда я создаю ошибку:
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'
});
}
});