Узел Экспресс консолидировать Hogan — Несогласованная ошибка при компиляции частичных файлов

#node.js #express #hogan.js

#node.js #экспресс #hogan.js

Вопрос:

Я обновил свое приложение со старых библиотек на самую новую, но столкнулся с несогласованной ошибкой.
Мои библиотеки :

 npm list --depth=0
    ├── consolidate@0.10.0
    ├── express@4.4.4
    ├── hogan.js@3.0.2
    ├── node-uuid@1.4.1
    └── socket.io@1.0.6
 

Вот пример кода, который я запускаю. Полный код здесь.

 var express = require('express');
var http = require('http');
var uuid = require('node-uuid');
var consolidate = require('consolidate');

//////////////////////
// Server setup
//////////////////////
var app = express();
app.engine('html', consolidate.hogan);
app.set('view engine', 'html');
app.set('views', __dirname   '/views');
app.enable('view cache');
app.disable('view layout');

var server = http.createServer(app);
var io = require('socket.io').listen(server);
io.set('log level', 1); // reduce logging

server.listen(9000);

//////////////////////
// Routing
//////////////////////
// Partials used in many rendering views
function hoganPartials() {
    return {
        head : 'common/head',
        mainHeader : 'common/mainHeader',
        mainFooter : 'common/mainFooter'
    };
};

app.use('/files', express.static(__dirname   '/files'));

app.get('/about', function(req, res) {
    res.render('about', {
        partials: hoganPartials(),
        title : 'Title - About'
    });
});
 

Поэтому, когда я запускаю этот код, у меня иногда возникает случайная ошибка:

  • Если страница сначала отображается правильно, она всегда будет отображаться правильно, даже после обновления.
  • Если страница не отображается с ошибкой 1, каждый раз, когда я буду обновляться, она не будет отображаться с ошибкой 2.
  • Некоторые представления могут отображаться, а другие нет, даже если они используют одни и те же частичные файлы.
  • Перезапуск приложения приведет к сбросу ошибок, и некоторый сбой представления при предыдущем запуске может работать в текущем и наоборот.
  • Отключение кэширования представления не влияет.

Ошибка 1

 SyntaxError: Unexpected token ( at Object.Function (<anonymous>) 
    at Object.Hogan.makePartials (/home/philaeux/dota2draft/node_modules/hogan.js/lib/compiler.js:301:28) 
    at Object.Hogan.makeTemplate (/home/philaeux/dota2draft/node_modules/hogan.js/lib/compiler.js:290:25) 
    at Object.Hogan.generate (/home/philaeux/dota2draft/node_modules/hogan.js/lib/compiler.js:280:17) 
    at Object.Hogan.compile (/home/philaeux/dota2draft/node_modules/hogan.js/lib/compiler.js:416:21) 
    at Function.exports.hogan.render (/home/philaeux/dota2draft/node_modules/consolidate/lib/consolidate.js:448:56) 
    at /home/philaeux/dota2draft/node_modules/consolidate/lib/consolidate.js:144:25 
    at /home/philaeux/dota2draft/node_modules/consolidate/lib/consolidate.js:97:5 
    at fs.js:271:14 
    at Object.oncomplete (fs.js:107:15)
 

Ошибка 2

 SyntaxError: Unexpected token ( at Object.Function (<anonymous>) 
    at Object.Hogan.makePartials (/home/philaeux/dota2draft/node_modules/hogan.js/lib/compiler.js:301:28) 
    at Object.Hogan.makeTemplate (/home/philaeux/dota2draft/node_modules/hogan.js/lib/compiler.js:290:25) 
    at Object.Hogan.generate (/home/philaeux/dota2draft/node_modules/hogan.js/lib/compiler.js:280:17) 
    at Object.Hogan.compile (/home/philaeux/dota2draft/node_modules/hogan.js/lib/compiler.js:416:21) 
    at Function.exports.hogan.render (/home/philaeux/dota2draft/node_modules/consolidate/lib/consolidate.js:448:56) 
    at /home/philaeux/dota2draft/node_modules/consolidate/lib/consolidate.js:144:25 
    at read (/home/philaeux/dota2draft/node_modules/consolidate/lib/consolidate.js:91:22) 
    at /home/philaeux/dota2draft/node_modules/consolidate/lib/consolidate.js:142:9 
    at next (/home/philaeux/dota2draft/node_modules/consolidate/lib/consolidate.js:117:38)
 

Я безуспешно пытался понизить некоторые библиотеки. Я не могу вспомнить, с какой версии я начинал (вероятно, express <4.0.0). Я полностью запутался в этом…
Спасибо за ваше время.

Комментарии:

1. Если кто-то ищет ответ, я не смог найти способ исправить ошибку, поэтому я заменил движок Hogan на Handlebars. Теперь он работает без сбоев.