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

У меня есть такой код, который будет визуализировать шаблон Jade без определения маршрута. Думайте об этом как о 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 () не выдает ошибку. Вместо этого он отображает страницу с ошибкой. Есть ли способ обнаружить отсутствующий шаблон или ошибки рендеринга?

Ответы [ 4 ]

44 голосов
/ 28 марта 2013

Лучшим способом сделать это, вместо того, чтобы требовать fs и иметь другой обратный вызов, было бы использование обратного вызова рендера:

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);
    }
});
2 голосов
/ 14 сентября 2011

Используйте fs.exists(p, [callback]), чтобы проверить, существует ли файл перед вызовом res.render

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

Узел 0.6.x и старше

Используйте path.exists(p, [callback]), чтобы проверить, существует ли файл перед вызовом res.render

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

1 голос
/ 10 января 2016

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

var html = jade.renderFile('path/to/file.jade', context, function(err, html) {};
0 голосов
/ 05 сентября 2011

Вы можете использовать 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 });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...