如何识别自定义错误

我需要将代码/ ID分配给我的自定义错误:

这是当我创build错误:

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

任何人都可以帮助我理解我该如何做到这一点?

确定

 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); } 

Errortypes可以根据文档进行扩展 。 您可以定义一个扩展Errortypes的SystemError

 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 } }); 

但是,当你有一个中央的error handling机制时,所有这些都是有益的。 例如,在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' }); } });