
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
yhttperror
Advanced tools
Better HTTP errors for your NodeJS server.
As a child constructor of the YError one, YHTTPError allow you to get more valuable errors for better debugging, even for production errors.
YHTTPError also allows you to specify an HTTP error code, with 500 as a fallback. Here is a sample use case near to how we use it at SimpliField:
import YHTTPError from 'yhttperror';
app.put('/users/:user_id', function(req, res, next) {
// Let's start a Promise chain
Promise.resolve()
// This validate the payload an could throw errors
.then(checkUserUpdatePayload.bind(null, req.body))
// wrap any error into an HTTP 400 error with debug params
.catch(function wrapUserPayloadError(err) {
throw YHTTPError.wrap(err, 400, 'E_BAD_PAYLOAD', req.params.user_id, req.body);
})
// This check rights an return the result
.then(checkUserRights.bind(null, req.user._id, 'USER_UPDATE'))
// throw a YHTTPError if the user can't update an user
.then(throwIfNotAuthorized(authorized) {
if(!authorized) {
throw new YHTTPError(401, 'E_UNAUTHORIZED', 'USER_UPDATE', authorized);
}
})
// This update the user in the database
.then(updateUser.bind(null, req.params.user_id, req.body))
// wrap the error only if it is not yet a YHTTPError, in this case, db errors
.catch(function castDatabaseError(err) {
throw YHTTPError.cast(err, 500, 'E_DB_ERROR');
})
.then(sendUser.bind(null, res))
.catch(function sendError(err) {
// Sending the error, better done in an error middleware but keeping things
// simple here. We're just passing the error to next like this in production
// code: .catch(next);
res.status(err.httpCode).send(err.stack);
});
});
The above would give you valuable errors like this:
// Sample payload error:
// YError: E_INVALID_PROPERTY ('name', undefined)
// at validateUser (/validateUser.js:5:11)
// (...)
// YHTTPError [400]: E_BAD_PAYLOAD ('abbacacaabbacacaabbacaca', { email: 'a@a.com' })
// at Function.YHTTPError.wrap (/home/nfroidure/simplifield/yhttperror/src/index.js:41:12)
// at /home/nfroidure/simplifield/yhttperror/test.js:16:21
// (...)
// Sample right error:
// YHTTPError [401]: E_UNAUTHORIZED ('b17eb17eb17eb17eb17eb17e', 'USER_UPDATE')
// at Function.YHTTPError.wrap (/home/nfroidure/simplifield/yhttperror/src/index.js:41:12)
// at /home/nfroidure/simplifield/yhttperror/test.js:16:21
// (...)
// Sample db error:
// Error: Cannot connect to database
// at dbConnect (/db.js:5:11)
// (...)
// YHTTPError [500]: E_DB_ERROR ()
// at Function.YHTTPError.wrap (/home/nfroidure/simplifield/yhttperror/src/index.js:41:12)
// at /home/nfroidure/simplifield/yhttperror/test.js:16:21
// (...)
ErrorClass representing an HTTP Error with extra debug informations
Kind: global class
Extends: Error, YError
Error
Creates a new YHTTPError with an HTTP error code, an error code and some params as debug values.
| Param | Type | Default | Description |
|---|---|---|---|
| httpCode | number | 500 | The HTTP error code corresponding to the actual error |
| [errorCode] | string | "'E_UNEXPECTED'" | The error code corresponding to the actual error |
| [...params] | any | Some additional debugging values |
YHTTPErrorWraps any error and output a YHTTPError with an HTTP error code, an error code and some params as debug values.
Kind: static method of YHTTPError
Returns: YHTTPError - The wrapped error
| Param | Type | Default | Description |
|---|---|---|---|
| err | Error | The error to wrap | |
| httpCode | number | The HTTP error code corresponding to the actual error | |
| [errorCode] | string | "'E_UNEXPECTED'" | The error code corresponding to the actual error |
| [...params] | any | Some additional debugging values |
YHTTPErrorReturn YHTTPError as is or wraps any other error and output a YHTTPError with an HTTP error code, an error code and some params as debug values.
Kind: static method of YHTTPError
Returns: YHTTPError - The wrapped error
| Param | Type | Default | Description |
|---|---|---|---|
| err | Error | The error to cast | |
| httpCode | number | The HTTP error code corresponding to the actual error | |
| [errorCode] | string | "'E_UNEXPECTED'" | The error code corresponding to the actual error |
| [...params] | any | Some additional debugging values |
YHTTPErrorSame than YHTTPError.wrap() but preserves the HTTP code,
the error code and the debug values of the error if it is
already an instance of the YHTTPError constructor.
Kind: static method of YHTTPError
Returns: YHTTPError - The wrapped error
| Param | Type | Default | Description |
|---|---|---|---|
| err | Error | The error to bump | |
| httpCode | number | The HTTP error code corresponding to the actual error | |
| [errorCode] | string | "'E_UNEXPECTED'" | The error code corresponding to the actual error |
| [...params] | any | Some additional debugging values |
FAQs
Better HTTP errors for your NodeJS server.
The npm package yhttperror receives a total of 414 weekly downloads. As such, yhttperror popularity was classified as not popular.
We found that yhttperror demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.