forked from creationix/stack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
stack.js
29 lines (29 loc) · 763 Bytes
/
stack.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function Stack(/*layers*/) {
var error = Stack.errorHandler,
handle = error;
Array.prototype.slice.call(arguments).reverse().forEach(function (layer) {
var child = handle;
handle = function (req, res) {
try {
layer(req, res, function (err) {
if (err) { return error(req, res, err); }
child(req, res);
});
} catch (err) {
error(req, res, err);
}
};
});
return handle;
}
Stack.errorHandler = function error(req, res, err) {
if (err) {
console.error(err.stack);
res.writeHead(500, {"Content-Type": "text/plain"});
res.end(err.stack + "\n");
return;
}
res.writeHead(404, {"Content-Type": "text/plain"});
res.end("Not Found\n");
};
module.exports = Stack;