Skip to content

Commit c5d45c0

Browse files
author
Martin Martinez Rivera
committed
Custom error handling
1 parent 696d6be commit c5d45c0

4 files changed

Lines changed: 58 additions & 4 deletions

File tree

bin/ldnode.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,14 @@ var argv = require('nomnom')
7979
help: 'Suffix for SSE files (default: \'.events\')',
8080
abbr: 'sE'
8181
})
82+
.option('noErrorPages', {
83+
full: 'no-error-pages',
84+
help: 'Disable custom error pages (use Node.js default pages instead)'
85+
})
86+
.option('errorPages', {
87+
full: 'error-pages',
88+
help: 'Folder from which to look for custom error pages files (files must be named <error-code>.html -- eg. 500.html)'
89+
})
8290
.parse();
8391

8492
// Print version and leave

index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ var putHandler = require('./lib/handlers/put.js');
3232
var deleteHandler = require('./lib/handlers/delete.js');
3333
var patchHandler = require('./lib/handlers/patch.js');
3434

35+
// Error page handler
36+
var errorHandler = require('./lib/error.js');
37+
3538
function ldnode (argv) {
3639
var ldp = new LDP(argv);
3740
var app = express();
@@ -70,6 +73,11 @@ function createServer(argv) {
7073
var ldp = ldpApp.locals.ldp;
7174
app.use(ldp.mount, ldpApp);
7275

76+
//Error handling
77+
app.use(errorHandler.handler);
78+
79+
app.locals.ldp = ldp;
80+
7381
if (ldp && (ldp.webid || ldp.key || ldp.cert) ) {
7482
debug.settings("SSL Private Key path: " + ldp.key);
7583
debug.settings("SSL Certificate path: " + ldp.cert);

lib/error.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*jslint node: true*/
2+
"use strict";
3+
4+
var fs = require('fs');
5+
6+
function errorPageHandler(err, req, res, next) {
7+
var ldp = req.app.locals.ldp;
8+
if (ldp.customErrorPages) {
9+
var errorPage = ldp.errorPages +
10+
err.status.toString() + '.html';
11+
fs.readFile(errorPage, 'utf8', function(readErr, text) {
12+
if (readErr) {
13+
defaultErrorHandler(err, res);
14+
} else {
15+
res.status(err.status);
16+
res.send(text);
17+
}
18+
});
19+
} else {
20+
defaultErrorHandler(err, res);
21+
}
22+
}
23+
24+
function defaultErrorHandler(err, res) {
25+
res.status(err.status);
26+
res.send(err.message);
27+
}
28+
29+
exports.handler = errorPageHandler;

lib/ldp.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ function LDP(argv) {
2727
ldp.cache = argv.cache;
2828
ldp.live = argv.live;
2929
ldp.root = argv.root || process.cwd();
30+
// Add trailing /
31+
if (!(S(ldp.root).endsWith('/'))) {
32+
ldp.root += '/';
33+
}
3034
ldp.port = argv.port;
3135
ldp.secret = argv.secret;
3236
ldp.cert = argv.cert;
@@ -48,10 +52,6 @@ function LDP(argv) {
4852
ldp.suffixChanges = argv.suffixChanges || '.changes';
4953
ldp.suffixSSE = argv.suffixSSE || '.events';
5054

51-
if (!(S(ldp.root).endsWith('/'))) {
52-
ldp.root += '/';
53-
}
54-
5555
ldp.pathFilter = regexp().start(ldp.mount).toRegExp();
5656
ldp.xssProxy = argv.xssProxy;
5757
ldp.proxyFilter = regexp().start(ldp.xssProxy).toRegExp();
@@ -61,6 +61,15 @@ function LDP(argv) {
6161
ldp.SSEsubscriptions = {};
6262
ldp.subscriptions = {};
6363

64+
// Error pages folder
65+
ldp.customErrorPages = !argv.noErrorPages;
66+
if (ldp.customErrorPages) {
67+
ldp.errorPages = argv.errorPages || ldp.root + 'errorPages/';
68+
if (!S(ldp.errorPages).endsWith('/')) {
69+
ldp.errorPages += '/';
70+
}
71+
}
72+
6473
debug.settings("mount: " + ldp.mount);
6574
debug.settings("root: " + ldp.root);
6675
debug.settings("URI path filter regexp: " + ldp.pathFilter);

0 commit comments

Comments
 (0)