仅在重命名模板时无法在node.js ejs模板中查找视图

时间:2013-04-19 11:16:10

标签: node.js ejs

我在ejs 3模板中有一个node.js应用程序渲染。 让我们说 - 有一个模板,course.ejs,它曾经在node.js中运行良好。

res.render('course', locals);

然而,今天当我尝试更改内容时,让我们说 - course.ejs,它没有生效,node.js应用程序没有错误,传递给模板的数据也没问题。

我甚至会复制粘贴此模板的内容,并使用不同的名称创建一个新模板 - course1.ejs。并将我的代码更改为

res.render('course1', locals);

然后当应用程序再次运行时,会弹出错误说

错误:无法查找视图“course1”模板。

node.js和template中的代码都可以,它应该以上面的方式工作。为什么它现在不起作用。我有我的ejs版本0.8.3,而在3.1.0中表达,在0.10.0中表示node.js

这是我的应用配置。

app.configure(function(){
    app.engine('.html', require('ejs').__express);
    app.set('view engine', 'html');
    app.set('views',__dirname+'/views');

    app.use(express.favicon(__dirname + '/public/favicon.ico'));

  app.use(express.compress({
    filter: function (req, res) {
      return /json|text|javascript|css/.test(res.getHeader('Content-Type'));
    },
    level: 9
  }));  

    app.use(express.bodyParser({uploadDir:__dirname+'/public/uploads',keepExtensions: true,limit: '50mb'}));
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.session({ 
                      cookie: { maxAge: 24 * 60 * 60 * 1000 }
                      ,store: sessionStore
                      ,secret: config.sessionSecret
                      ,key: 'express.sid'
                      ,clear_interval: 3600
    }));


    app.use(express.csrf()); 
    app.use(function(req, res, next){
      res.locals.token = req.session._csrf;
      next();
    });


    app.use(express.static(__dirname+'/public'));   

}

我的静态文件位于公共文件夹中,所有模板都在视图文件夹中。

我想在

之前有人遇到过这种问题

1 个答案:

答案 0 :(得分:9)

如果您的模板具有.ejs扩展名,我认为此配置无效:

app.engine('.html', require('ejs').__express);
app.set('view engine', 'html');

使用该配置时,Express会在您致电TEMPLATENAME.html而非res.render('TEMPLATENAME', ...)时查找TEMPLATENAME.ejs。为此,你需要这个:

app.engine('ejs', require('ejs').renderFile);
app.set('view engine', 'ejs');

所以course1部分已经解决了:Express正在寻找它找不到的course1.html,所以它会产生你得到的错误(Failed to lookup view...)。

但是,我没有看到渲染course.ejs如何起作用。也许你有另一条路线来处理你正在测试的请求?或者您在views文件夹中有一个course.htmlcourse.ejs除外)?