From 0a223f2bb76aa8e4664a783b2876720ef8d13076 Mon Sep 17 00:00:00 2001 From: New Now Nohow Date: Thu, 6 Mar 2014 22:54:25 -0500 Subject: [PATCH] Let errors provide their own status. When calling `ctx.throw`, you're allowed to provide an error object and a status code. The status code is later set as the `status` property of the error object. If no status code is provided, it defaults to 500. However, this happens even if the error object already had a `status` property. This commit allows an error's pre-existing `status` property to be used in conjunction with `ctx.throw`. If the status code is below 500, the error message will be exposed to the user in the HTTP response. It would be nice to have some Error subclasses that always have the same status code, because then we could just write `ctx.throw(new WhateverError())`, and define which 4xx error code we want in the definition of `WhateverError` itself. If, for example, an `AuthenticationError` is always meant to go along with a 401, then it would be nice to just have that knowledge in the class definition. --- lib/context.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/context.js b/lib/context.js index d0eed8d..a66d7e5 100644 --- a/lib/context.js +++ b/lib/context.js @@ -71,7 +71,7 @@ var proto = module.exports = { } var err = msg instanceof Error ? msg : new Error(msg); - err.status = status || 500; + err.status = status || err.status || 500; err.expose = err.status < 500; throw err; },