Permalink
Browse files

updated error-pages example

  • Loading branch information...
1 parent 6f7075b commit 6b47271679daeca2f528bb823b17f625845dfd7d @tj tj committed Jul 1, 2011
Showing with 44 additions and 57 deletions.
  1. +39 −52 examples/error-pages/app.js
  2. +1 −4 examples/error-pages/views/404.jade
  3. +4 −1 examples/error-pages/views/index.jade
@@ -9,73 +9,54 @@ require.paths.unshift(__dirname + '/../../support');
var express = require('../../lib/express');
var app = express.createServer();
+app.set('views', __dirname + '/views');
+app.set('view engine', 'jade');
// Serve default connect favicon
app.use(express.favicon());
// Logger is placed below favicon, so favicon.ico
// requests will not be logged
-app.use(express.logger({ format: '":method :url" :status' }));
+app.use(express.logger('":method :url" :status'));
// "app.router" positions our routes
// specifically above the middleware
// assigned below
app.use(app.router);
-// When no more middleware require execution, aka
-// our router is finished and did not respond, we
-// can assume that it is "not found". Instead of
-// letting Connect deal with this, we define our
-// custom middleware here to simply pass a NotFound
-// exception
+// Since this is the last non-error-handling
+// middleware use()d, we assume 404, as nothing else
+// responded.
app.use(function(req, res, next){
- next(new NotFound(req.url));
-});
-
-app.set('views', __dirname + '/views');
-
-// Provide our app with the notion of NotFound exceptions
-
-function NotFound(path){
- this.name = 'NotFound';
- if (path) {
- Error.call(this, 'Cannot find ' + path);
- this.path = path;
- } else {
- Error.call(this, 'Not Found');
- }
- Error.captureStackTrace(this, arguments.callee);
-}
-
-/**
- * Inherit from `Error.prototype`.
- */
-
-NotFound.prototype.__proto__ = Error.prototype;
-
-// We can call app.error() several times as shown below.
-// Here we check for an instanceof NotFound and show the
-// 404 page, or we pass on to the next error handler.
-
-// These handlers could potentially be defined within
-// configure() blocks to provide introspection when
-// in the development environment.
-
-app.error(function(err, req, res, next){
- if (err instanceof NotFound) {
- res.render('404.jade', { status: 404, error: err });
- } else {
- next(err);
- }
+ // the status option, or res.statusCode = 404
+ // are equivalent, however with the option we
+ // get the "status" local available as well
+ res.render('404', { status: 404, url: req.url });
});
-// Here we assume all errors as 500 for the simplicity of
-// this demo, however you can choose whatever you like
-
-app.error(function(err, req, res){
- res.render('500.jade', { status: 500, error: err });
+// error-handling middleware, take the same form
+// as regular middleware, however they require an
+// arity of 4, aka the signature (err, req, res, next).
+// when connect has an error, it will invoke ONLY error-handling
+// middleware.
+
+// If we were to next() here any remaining non-error-handling
+// middleware would then be executed, or if we next(err) to
+// continue passing the error, only error-handling middleware
+// would remain being executed, however here
+// we simply respond with an error page.
+
+
+app.use(function(err, req, res, next){
+ // we may use properties of the error object
+ // here and next(err) appropriately, or if
+ // we possibly recovered from the error, simply next().
+ res.render('500', {
+ status: err.status || 500
+ , error: err
+ });
});
// Routes
@@ -84,8 +65,14 @@ app.get('/', function(req, res){
res.render('index.jade');
});
-app.get('/404', function(req, res){
- throw new NotFound(req.url);
+app.get('/404', function(req, res, next){
+ next();
+});
+
+app.get('/403', function(req, res, next){
+ var err = new Error('not allowed!');
+ err.status = 403;
+ next(err);
});
app.get('/500', function(req, res, next){
@@ -1,4 +1 @@
-- if (error.path)
- h2 Cannot find #{error.path}
-- else
- h2 Page Not Found
+h2 Cannot find #{url}
@@ -5,4 +5,7 @@ ul
a(href="/500") 500
li
| visit
- a(href="/404") 404
+ a(href="/404") 404
+ li
+ | visit
+ a(href='/403') 403

0 comments on commit 6b47271

Please sign in to comment.