Так. Источник проблем — обновлённый с 2.5.0 на 3.0.0 express.js.
Руководство по миграции вот —
github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x, однако не всё так просто: функцию register, с которой возникли проблемы, заменили на engine, которая работает несколько иначе.
Вот что дали долгие поиски и копание в коде:
сам автор swig'а решил перейти с express.js на consolidate.js. Однако заставить работать swig под третьим экспрессом всё же можно, дописав в swig/index.js:
exports.__express = function (path, options, fn) {
options = options || {};
try {
options.filename = path;
var tmpl = exports.compileFile(_.last(path.split('/')));
fn(null, tmpl.render(options));
} catch (err) {
fn(err);
}
};
и в сам
ом вашем проекте заменив первую строку на вторую:
app.register('.html', swig); // для express v.2
app.engine('.html', swig.__express); // для express v.3
Изменения в экспрессе затронули и другие модули, использующиеся в моём проекте, в частности socket.io, впрочем это совсем другая история.
Надеюсь результаты моих поисков помогут другим.