我在ejs 3模板中有一个node.js应用程序渲染。 让我们说 - 有一个模板,course.ejs,它曾经在node.js中运行良好。
res.render('course', locals);
然而,今天当我尝试更改内容时,让我们说 - course.ejs,它没有生效,node.js应用程序没有错误,传递给模板的数据也没问题。
我甚至会复制粘贴此模板的内容,并使用不同的名称创建一个新模板 - course1.ejs。并将我的代码更改为
res.render('course1', locals);
然后当应用程序再次运行时,会弹出错误说
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'));
}
我想在
之前有人遇到过这种问题答案 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.html
(course.ejs
除外)?