5

我在 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 和模板中的代码都没有问题,应该可以按照上面的方式工作。为什么现在不行了。我有我的 ejs 版本 0.8.3,而 express 在 3.1.0 和 node.js 在 0.10.0

这是我的应用程序配置。

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'));   

}

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

我想知道以前有没有人遇到过这种问题

4

1 回答 1

11

.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工作的。也许您有另一条路线正在处理您正在测试的请求?或者你course.html在views文件夹中有一个(除了course.ejs)?

于 2013-04-19T11:39:33.320 回答