Error
Typ can be extended as per the docs. Sie können eine SystemError
definieren, die Error
Typ erweitert:
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;
Jetzt können Sie Ihre individuelle Fehler werfen:
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
}
});
Aber all dies ist nur von Vorteil, wenn Sie Handhabungsmechanismus einen zentralen Fehler. Zum Beispiel in einer expressjs
App, können Sie eine Fehler abfangende Middleware am Ende haben:
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'
});
}
});