Node: errors.js module

Created on 31 Jul 2017  路  5Comments  路  Source: nodejs/node

Node now has internal/errors.js module which allows to set static error codes for errors, which is great. Would be good to expose Node's internal error constructors in a new module say require('errors').

import {TypeError as NodesTypeError} from 'errors';

My use case is as follows: I am now rewriting an in-memory file system module memfs that mimics how fs module works, I would like to throw exactly the same errors as Node does, so that it can be used for testing, so now I have to basically copy-paste the internal/errors.js file into my project to be able to create similar errors to what Node does.

errors feature request

Most helpful comment

I think we can create a new module named errors(better) or others.
errors export Error/TypeError/RangeError/... just like internal/errors exports.
And more, errors export a helper function to create ErrorClass with some type.
We assign a temp name makeError to helper function.

const PathNotFoundError = errors.makeError('ERR_PATH_NOT_FOUND', '%s not found')
const err = new PathNotFoundError('/usr/foo/bar')
// err.code === 'ERR_PATH_NOT_FOUND'
// err.message === '/usr/foo/bar not found'

By the way, we can export all errors code used in internal/errors to errors. Just like errors.ERR_ASSERTION that equals 'ERR_ASSERTION'.
This can help user to check which error and don't need to remember code string.
String cannot autocompletion with IDE like WS, but exports variable can do.

All 5 comments

Eventually this may be a possibility. For the time being, however, while we are still in the process of migrating all of our internal errors, I would rather avoid it. The reason is due to the fact that changes to that internal API are still possible / likely as we move along.

I think we can create a new module named errors(better) or others.
errors export Error/TypeError/RangeError/... just like internal/errors exports.
And more, errors export a helper function to create ErrorClass with some type.
We assign a temp name makeError to helper function.

const PathNotFoundError = errors.makeError('ERR_PATH_NOT_FOUND', '%s not found')
const err = new PathNotFoundError('/usr/foo/bar')
// err.code === 'ERR_PATH_NOT_FOUND'
// err.message === '/usr/foo/bar not found'

By the way, we can export all errors code used in internal/errors to errors. Just like errors.ERR_ASSERTION that equals 'ERR_ASSERTION'.
This can help user to check which error and don't need to remember code string.
String cannot autocompletion with IDE like WS, but exports variable can do.

@jasnell Maybe we can export just the constructors like the internal TypeError and mark this API as experimental.

I've opened an issue (https://github.com/nodejs/node/issues/14216) and a PR (https://github.com/nodejs/node/pull/14250) earlier before about separating the error codes to a new module, but the errors are still being migrated so they are blocked temporarily. IMHO, the appropriate time to do these is after the migration are done.
(But the migration is slower than I expected 馃槪 )

just trying to understand what needs to be done here:

  • make internal/errors.js external
  • make sure all the error classes are documented, if not already

is that so?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

AkashaThorne picture AkashaThorne  路  207Comments

TazmanianDI picture TazmanianDI  路  127Comments

aduh95 picture aduh95  路  104Comments

speakeasypuncture picture speakeasypuncture  路  152Comments

yury-s picture yury-s  路  89Comments