2016-07-21 8 views

Antwort

1

definieren

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

Heben

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

Fang

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

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' 
     }); 
    } 
    }); 
Verwandte Themen