1

我有一个这样的目录

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

app.jsin 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.staticviews如果我将目录复制到app,则使用__dirname + '/views'效果很好。有谁知道为什么会这样?

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

4

1 回答 1

5

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

像这样配置您的应用程序

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

但问题的主要根源是您似乎误解了express(以及 MVC 的工作原理)。

expressexpress.static一旦请求 url 与现有的静态文件路径匹配,使用您的配置指令将静态数据发送到浏览器。

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

因此,为了显示例如索引页面(即使它没有参数),假设您的文件夹中有一个index.jsviews您必须执行类似的操作

app.get('/', function (req, res, next) {
    res.render('index', {});
});
于 2012-06-27T07:18:59.413 回答