【问题标题】:Error: Failed to lookup view in express + jade错误:无法在 express + jam 中查找视图
【发布时间】:2012-10-29 17:01:11
【问题描述】:

这是我的代码

var express = require('express');
var app = express();
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');

exports.makeObservable = function(state, path, cb) {
    app.get(path, function(req, res){
        res.render('observable.jade', state);
        //call callback with new user
        cb(req);
    });

    app.listen('9999'); 
}

每当我尝试访问path 时,都会收到以下错误: Error: Failed to lookup view "observable.jade"。我也尝试在没有.jade 的情况下通过observable,但它给出了同样的错误。我的 /views 文件夹中有 observable.jade 和 layout.jade。

我错过了什么?谢谢!

【问题讨论】:

  • 嗨。无法重现错误。如果您想快速猜测一下,也许 express 正在目录 __dirname + 'views' 中进行查找,该目录是脚本运行的任何位置,例如,如果脚本位于 /herman/code/myapp/scripts 中,它将查找 /herman/code/myapp/scripts/views,而不是 @ 987654330@...请发送更多数据。
  • 要调试它,请转到 express/lib/application.js 的第 493 行并添加 console.log(view.path);这将记录您的应用尝试访问的路径。
  • 感谢两位。确实,我的/view 文件夹在脚本的运行目录之外,但也将它放在正确的目录中并没有解决问题。我尝试使用console.log(),但它打印出undefined。我能做什么?
  • 通过打印 view 而不是 view.path 我可以注意到脚本确实是从一个完全不同的文件夹运行的。我最终设法解决了这个问题。谢谢。 :)
  • 有人应该把我的答案 + 赫尔曼的答案变成一个真正的答案,因为这可能对其他人有帮助。

标签: javascript express pug


【解决方案1】:

多亏了cmets中的建议,我终于解决了这个问题。首先,我检查了执行脚本的目录是否包含我放置.jade 文件的目录/views。一开始我无法解决这个问题,因为我无法确定这个脚本是从哪里执行的,所以我在/express/lib/application.js 的第 493 行放了一个console.log(view)。它打印出包含执行脚本的根目录的view 对象,因此我将/views 文件夹移到那里并且一切正常。

【讨论】:

    【解决方案2】:

    FWIW:我在相邻目录(即根/服务器、根/客户端)中有我的视图,并且遇到了此处描述的相同问题。我做的与 OP 不同的一件事是,当爬出服务器目录时,在我的 app.set 中添加一个“/”;即:

    这个:app.set('views', __dirname + '/../client/');

    而不是:app.set('views', __dirname + '../client/');

    HTH

    (非常感谢 OP 和 Pickels!)

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 2015-08-19
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 2021-08-15
      • 2014-02-07
      • 1970-01-01
      相关资源
      最近更新 更多