如何使用express.js捕获node.js中的渲染错误/缺失模板?
我有这样的代码将呈现一个没有定义的路线的玉模板。 想想这个像express.static,但它调用与URL的res.render。
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()不会引发错误。 相反,它正在渲染一个错误页面。 有没有办法来检测缺less的模板或任何渲染错误?
一个更好的方法来做,而不是要求fs
和另一个callback,将使用渲染的callback:
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); } });
在调用res.render
之前fs.exists(p, [callback])
使用fs.exists(p, [callback])
来检查文件是否存在
http://nodejs.org/docs/latest/api/fs.html#fs_fs_exists_path_callback
节点0.6.x和更旧
在调用res.render
之前path.exists(p, [callback])
使用path.exists(p, [callback])
检查文件是否存在
与@Augustin Riedinger的答案类似,使用renderFile
渲染variables时renderFile
:
var html = jade.renderFile('path/to/file.jade', context, function(err, html) {};
您可以使用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 }); } });