¿Cómo puedo detectar un error de representación / falta una plantilla en node.js usando express.js?

Tengo un código como este que renderizará una plantilla de jade sin una ruta definida. Piense en esto como el express.static pero se llama res.render con la url.

app.use(function (req, res, next) { try { res.render(req.url.substring(1), { title: "No Controller", user: req.session.user }); } catch (err) { console.log(err) next(); } }); 

El problema es que res.render () no está lanzando un error. En su lugar, está mostrando una página de error. ¿Hay alguna forma de detectar una plantilla faltante o algún error de representación?

Una mejor manera de hacerlo, en lugar de requerir fs y tener otra callback, sería usar la callback de render:

 res.render(my_page_im_not_sure_it_exists, {}, function(err, html) { if(err) { res.redirect('/404'); // File doesn't exist } else { res.send(html); } }); 

Use fs.exists(p, [callback]) para verificar si el archivo existe antes de llamar a res.render

http://nodejs.org/docs/latest/api/fs.html#fs_fs_exists_path_callback

Nodo 0.6.xy mayor

Use path.exists(p, [callback]) para verificar si el archivo existe antes de llamar a res.render

http://nodejs.org/docs/v0.6.0/api/path.html#path.exists

Al igual que en la respuesta de @Austin Austin Riedinger, lo mismo se aplica cuando se renderiza a una variable usando renderFile :

 var html = jade.renderFile('path/to/file.jade', context, function(err, html) {}; 

Podría usar fs.open para verificar si la plantilla existe.

 app.use(function (req, res, next) { fs.open(__dirname + '/views/' + req.url.substring(1) + '.jade', 'r', function (err) { if(err) { console.log(err); return next(); } res.render(req.url.substring(1), { title: "No Controller", user: req.session.user }); } });