我有一个像这样的目录
/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
也无济于事。这个目录适用于静态资产但不适用于模板,这很奇怪。
答案 0 :(得分:5)
您输错了,正确的选项名称是views
,而不是view
。
配置您的应用程序,如
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set('view options', { layout: true });
但问题的主要根源是你似乎误解了express
(以及MVC)的工作方式。
express
就会使用express.static
configure指令将静态数据发送到浏览器。
否则,它会尝试为请求的路径找到任何已定义的路由并执行相关的控制器(可能会或可能不会依次使用模板引擎)。
所以,为了表明,索引页面(即使它没有参数),如果你的index.js
文件夹中有views
,你必须做类似的事情
app.get('/', function (req, res, next) {
res.render('index', {});
});