errors
errors copied to clipboard
How to change the default error output in restify 7.x?
I changed the default error output in restify 4.x using the below code
`var restify = require('restify'); var util = require('util');
function ValidationError(message, errors) { restify.RestError.call(this, { restCode: 'ValidationError', statusCode: 400, message: message, constructorOpt: ValidationError }); this.name = 'ValidationError'; this.body.errors = errors; //<--- }
util.inherits(ValidationError, restify.RestError);`
And I got the desired result. Now am in a process of migrating my project to restify 7.x. So I couldn't use the restify.RestError, I have tried 'restify-errors-options' package's subclassing property but it doesn't work for me. I have tried the below code
restifyErrors.makeConstructor('ValidationError', { restCode: 'ValidationError', statusCode: 400, message: message }); var myErr = new errors.ValidationError( );
And I ended up with the below error
var myErr = new errors.ValidationError(); ^
TypeError: errors.ValidationError is not a constructor
So can anyone suggest a solution for this problem?
It seems that the docs are wrong, makeConstructor actually returns the new constructor instead of storing it in the module, so the proper way to use it would be
let ValidationError = restifyErrors.makeConstructor('ValidationError', {
restCode: 'ValidationError',
statusCode: 400,
message: message
});
var myErr = new errors.ValidationError();
Restify-errors 7.x makeConstructor doesn't work, I use it normally in 5.x. You can install Restify 7.2.1.
@ltvolks @micahr @sean3z @ranjithrajendran
in older versions the plugin add the constructor, in this version you need add manually
errs.testerror = errs.makeConstructor('testerror', {
statusCode: 200,
message: 'my default message'
});
Hi all - what version of restify-errors are you using? This should work on latest 7.0.0 release:
const errs = require('restify-errors');
const MyErr = errs.makeConstructor('MyError');
throw new MyErr('boom');
/Users/aliu/Sandbox/test/errors.js:3
throw new MyErr('boom');
^
MyError: boom
at Object.<anonymous> (/Users/aliu/Sandbox/test/errors.js:3:7)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
Regarding the storing of classes on the exports of the module, that feature was removed in 6.x. Some additional context can be found here: https://github.com/restify/errors#custom-constructors