Подтвердить что ты не робот

Как я могу поймать ошибку/отсутствующий шаблон рендеринга в node.js, используя express.js?

У меня есть такой код, который будет отображать шаблон нефрита без определенного маршрута. Подумайте об этом, как express.static, но он вызывает res.render с 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();
    }
});

Проблема заключается в том, что res.render() не выбрасывает ошибку. Вместо этого он создает страницу с ошибкой. Есть ли способ обнаружить отсутствующий шаблон или любые ошибки рендеринга?

4b9b3361

Ответ 1

Лучший способ сделать это, вместо того чтобы требовать fs и иметь другой обратный вызов, - использовать обратный вызов 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);
    }
});

Ответ 3

Аналогично @Augustin Riedinger ответ, то же самое относится к рендерингу переменной с помощью renderFile:

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

Ответ 4

Вы можете использовать fs.open, чтобы проверить, существует ли шаблон.

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 });
    }
});