> Better [libuv](https://github.com/libuv/libuv)/[Node.js](https://nodejs.org)/[io.js](https://iojs.org) error handling & reporting. Available in npm as *errno*.
Ever find yourself needing more details about Node.js errors? Me too, so *node-errno* contains the errno mappings direct from libuv so you can use them in your code.
**By errno:**
```js
require('errno').errno[3]
// → {
// "errno": 3,
// "code": "EACCES",
// "description": "permission denied"
// }
```
**By code:**
```js
require('errno').code.ENOTEMPTY
// → {
// "errno": 53,
// "code": "ENOTEMPTY",
// "description": "directory not empty"
// }
```
**Make your errors more descriptive:**
```js
var errno = require('errno')
function errmsg(err) {
var str = 'Error: '
// if it's a libuv error then get the description from errno
if (errno.errno[err.errno])
str += errno.errno[err.errno].description
else
str += err.message
// if it's a `fs` error then it'll have a 'path' property
if (err.path)
str += ' [' + err.path + ']'
return str
}
var fs = require('fs')
fs.readFile('thisisnotarealfile.txt', function (err, data) {
if (err)
console.log(errmsg(err))
})
```
**Use as a command line tool:**
```
~ $ errno 53
{
"errno": 53,
"code": "ENOTEMPTY",
"description": "directory not empty"
}
~ $ errno EROFS
{
"errno": 56,
"code": "EROFS",
"description": "read-only file system"
}
~ $ errno foo
No such errno/code: "foo"
```
Supply no arguments for the full list. Error codes are processed case-insensitive.
You will need to install with `npm install errno -g` if you want the `errno` command to be available without supplying a full path to the node_modules installation.
Use `errno.custom.createError()` to create custom `Error` objects to throw around in your Node.js library. Create error hierarchies so `instanceof` becomes a useful tool in tracking errors. Call-stack is correctly captured at the time you create an instance of the error object, plus a `cause` property will make available the original error object if you pass one in to the constructor.
var MyError = create('MyError') // inherits from Error
var SpecificError = create('SpecificError', MyError) // inherits from MyError
var OtherError = create('OtherError', MyError)
// use them!
if (condition) throw new SpecificError('Eeek! Something bad happened')
if (err) return callback(new OtherError(err))
```
Also available is a `errno.custom.FilesystemError` with in-built access to errno properties:
```js
fs.readFile('foo', function (err, data) {
if (err) return callback(new errno.custom.FilesystemError(err))
// do something else
})
```
The resulting error object passed through the callback will have the following properties: `code`, `errno`, `path` and `message` will contain a descriptive human-readable message.