【问题标题】:Nunjucks - find which template file causes "template render error"Nunjucks - 查找导致“模板渲染错误”的模板文件
【发布时间】:2018-04-30 06:31:19
【问题描述】:

我正在通过 Node+Express 渲染 Nunjucks。

我有大量的视图,突然我的一个视图在以下堆栈跟踪中抛出了一个错误。

如何找出错误源自哪个模板或帮助程序/宏?

"Template render error: Template render error: Template render error: Template render error: TypeError: Cannot read property 'height' of null at Object._prettifyError (/code/node_modules/nunjucks/src/lib.js:35:11) at /code/node_modules/nunjucks/src/environment.js:547:19 at eval (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:151:12) at eval (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:57:12) at eval (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:46:11) at /code/node_modules/nunjucks/src/environment.js:555:11 at eval (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:155:12) at /code/node_modules/nunjucks/src/environment.js:555:11 at eval (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:105:12) at /code/node_modules/nunjucks/src/environment.js:555:11 at eval (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:11:11) at /code/node_modules/nunjucks/src/environment.js:597:9 at Template.root [as rootRenderFunc] (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:188:3) at Template.getExported (/code/node_modules/nunjucks/src/environment.js:595:10) at eval (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:10:5) at Environment.getTemplate (/code/node_modules/nunjucks/src/environment.js:263:9) at Template.root [as rootRenderFunc] (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:8:5) at Template.render (/code/node_modules/nunjucks/src/environment.js:540:10) at eval (eval at _compile (/code/node_modules/nunjucks/src/environment.js:617:18), <anonymous>:104:10) at fn (/code/node_modules/a-sync-waterfall/index.js:26:24) at /code/node_modules/a-sync-waterfall/index.js:66:22 at executeSync (/code/node_modules/a-sync-waterfall/index.js:8:15)"

【问题讨论】:

  • 尝试转到node_modules/nunjucks/src/environment.js:547并添加console.log(err, _Obj3)。
  • 感谢@AikonMogwai 非常适合在视图助手中发现错误!但是,如果它是直接在 nunjuck 文件中的错误,它并没有说明是哪个文件。我发现了_proto3.render = function render(ctx, parentFrame, cb) { 的捕获并记录了this。其中包含path、文件名和tmplStr - nunjucks 在错误发生之前进行了多长时间的解析。

标签: node.js templates nunjucks


【解决方案1】:

这完全是关于在 node_modules/nunjucks/src/environment.js 中添加控制台日志记录,正如 Aikon Mogwai 在 cmets 中所建议的那样。

  1. 对于查看助手,最好在547 行执行console.log(err, _Obj3)(在this.rootRenderFunc(this.env, context, frame, globalRuntime, function (err, res) { 中的catch 内)

  2. 对于.njk 中的错误,最好在526 处执行console.log(this);(在_proto3.render = function render(ctx, parentFrame, cb) { 中的catch 中)

记录的对象将包含以下有用的属性

  • filename -> 导致错误的文件的绝对路径
  • tmplStr -> 在出错之前它可以解析的该文件的所有内容
  • 一组上下文对象,例如,包含当时存在的所有 Nunjucks 全局变量和过滤器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多