Неуспешно търсене на изглед в node.js ejs шаблон, докато шаблонът току-що е преименуван

Имам изобразяване на приложение node.js в шаблон ejs 3. да кажем - има един шаблон, 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'));   

}

моите статични файлове са в публичната папка, а всички шаблони са в папката за преглед.

Чудя се дали някой се е сблъсквал с подобен проблем преди


person user824624    schedule 19.04.2013    source източник
comment
Възможно ли е и вие да имате някъде course.html, което се обслужва от express.static? Също така, покажете ни вашата настройка на приложението Express (app.use, app.configure и т.н.).   -  person robertklep    schedule 19.04.2013
comment
  -  person user824624    schedule 19.04.2013
comment
Да, сбърках с предложението express.static, но ако имате course.html във вашата папка views, това може да причинява проблемите. Вижте моя отговор.   -  person robertklep    schedule 19.04.2013


Отговори (1)


Не мисля, че тази конфигурация може да работи, ако вашите шаблони имат разширение .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 в папката с изгледи (освен course.ejs)?

person robertklep    schedule 19.04.2013
comment
Благодаря, Робърт, работи, макар че не разбирам съвсем защо, предишната конфигурация работеше за мен, докато не актуализирах моята node.js версия от 0.8 на 0.10 - person user824624; 19.04.2013
comment
В моята папка с шаблони за изгледи има course_new.html, course_description.html, course_recent.html, освен това тези html файлове включват базирани на ejs шаблони - person user824624; 19.04.2013
comment
Смесването на .ejs файлове заедно с .html файлове може да е причината за вашите проблеми. Най-доброто решение би било да решите какво имената на вашите шаблонни файлове трябва да получат като разширение и да използвате това разширение само в папката views. - person robertklep; 19.04.2013