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

Jon*_*Ong 1 node.js express pug

我有这样的目录

/Workspace
  /app
    app.js
  /lib
    /public
      /styles
        *.css
      /scripts
        *.js
    /views
      *.jade
Run Code Online (Sandbox Code Playgroud)

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 ...
Run Code Online (Sandbox Code Playgroud)

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

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

pen*_*tur 5

你有一个错误的类型,正确的选项名称是views,而不是view.

配置你的应用程序

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

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

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

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

因此,为了显示索引页面(即使它没有参数),如果你index.jsviews文件夹中有一个,你必须做类似的事情

app.get('/', function (req, res, next) {
    res.render('index', {});
});
Run Code Online (Sandbox Code Playgroud)