玉在不同的文件夹中找不到视图

时间:2012-06-27 07:09:59

标签: node.js express pug

我有一个像这样的目录

/Workspace
  /app
    app.js
  /lib
    /public
      /styles
        *.css
      /scripts
        *.js
    /views
      *.jade

来自app.js中的app,我有以下代码:

libPath = __dirname + '/../lib'

... express stuff ...

app.configure(function() {
  app.set('view', libPath + '/views')
  ... express stuff ...
  app.use(express.static(libPath + '/public'))

... rest of the app ...

现在,问题是Jade无法找到任何视图,但找到了所有静态资产。因此,app.set('view')不起作用,但express.static是。如果我将views目录复制到app,则使用__dirname + '/views'可以正常工作。任何人都知道为什么会这样吗?

app.get('view'),我得到一个这样的目录:/Users/jong/Workspace/app/../lib/views。我尝试做绝对路线/Users/jong/Workspace/lib/views也无济于事。这个目录适用于静态资产但不适用于模板,这很奇怪。

1 个答案:

答案 0 :(得分:5)

您输错了,正确的选项名称是views,而不是view

配置您的应用程序,如

    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.set('view options', { layout: true });

但问题的主要根源是你似乎误解了express(以及MVC)的工作方式。

一旦请求url与现有的静态文件路径匹配,

express就会使用express.static configure指令将静态数据发送到浏览器。

否则,它会尝试为请求的路径找到任何已定义的路由并执行相关的控制器(可能会或可能不会依次使用模板引擎)。

所以,为了表明,索引页面(即使它没有参数),如果你的index.js文件夹中有views,你必须做类似的事情

app.get('/', function (req, res, next) {
    res.render('index', {});
});