Error: Failed to lookup view -> simple code

Error: Failed to lookup view -> simple code

我想编译一个包含动态内容的jade 文件。 我的代码来自这里 http://jade-lang.com/tutorial/ :

app.get('/test', function(request, response){

var fn = jade.compileFile('views/test.jade');
var htmlOutput = fn({
  maintainer: {
    name: 'Forbes Lindesay',
    twitter: '@ForbesLindesay',
    blog: 'forbeslindesay.co.uk'
  }
});
response.render(htmlOutput);
});

我收到以下错误:

Error: Failed to lookup view "<!DOCTYPE html><html lang="en"><h1></h1>Maintainer: Forbes L
        indesay</html><table><tr><td>Twitter</td><td>@ForbesLindesay</td></tr><tr><td>Blog</td><td
        >forbeslindesay.co.uk</td></tr></table>" in views directory "D:\test.js\views" "<!DOCTYPE html><html lang="en"><h1></h1>Maintainer: Forbes L
        indesay</html><table><tr><td>Twitter</td><td>@ForbesLindesay</td></tr><tr><td>Blog</td><td
        >forbeslindesay.co.uk</td></tr></table>" in views directory "D:\test.js\views"

变量似乎是正确的(取自route.js)。 错误是什么意思?有几个问题和我一样,但是我不能适应我的场景...

提前致谢

您正在尝试将呈现 Jade 模板的独立方法与 Express 为您呈现它们的能力相结合。

试试这个:

app.get('/test', function(request, response) {
  response.render('test.jade', {
    maintainer: {
      name: 'Forbes Lindesay',
      twitter: '@ForbesLindesay',
      blog: 'forbeslindesay.co.uk'
    }
  });
});

不过请确保 Express 配置正确。在您的 Express 设置中,使用这个:

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

这假定 views/ 目录是您从中调用 response.render() 的 .js 文件的直接子目录。更多信息 here.

如果你真的想用jade.compileFile()代替,你可以参考@ArtemBaranovskii评论中的建议,使用response.send(htmlOutput).