user1306716
user1306716

Reputation: 16

Handle jade errors in res.render()

I have a working node.js / express based server and am using jade for templating. Usually there is no problem but a couple of times every day I get an error message when requsting any page. The error is 'failed to locate view'. I don't know why i get this error since it worked fine just minutes before.

The question however is how I can force a crash on this event, for example:

res.render('index.jade', {info: 'msg'}, function(error, ok) {
    if (error)
        throw new Error('');
    // Proceed with response
};

How would I do this? And how would I proceed with the response?

thank you.

Upvotes: 0

Views: 2042

Answers (2)

generalhenry
generalhenry

Reputation: 17319

You can add an error handling middleware.

app.use(function handleJadeErrors(err, req, res, next) {
  // identify the errors you care about
  if (err.message === 'failed to locate view') {
    // do something sensible, such as logging and then crashing
    // or returning something more useful to the client
  } else {
    // just pass it on to other error middleware
    next(err);
  }
});

Upvotes: 1

Jeff Lowery
Jeff Lowery

Reputation: 2597

Try this:

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

Upvotes: 0

Related Questions