Узел рендеринга усов на стороне сервера

Я пытаюсь создать простое приложение для компиляции шаблонов усов на стороне сервера статических страниц, вот что у меня есть на данный момент:

var view = {

    title: "Joe",
    calc: function () {

        return 2+4;
    }

};

var mustache = require("mustache");
var template = require("./home.template");

var output = mustache.to_html(template, view);

console.log(output);

А мой шаблон выглядит так:

{{title}} spend {{calc}}

Любые предложения относительно того, что вызывает сбой?

Вот полное сообщение об ошибке:

home.template:1
} spend {{calc}}
        ^

module.js:437
  var compiledWrapper = runInThisContext(wrapper, filename, true);
                        ^
SyntaxError: Unexpected token {
    at Module._compile (module.js:437:25)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/Users/MorehouseJ09/Documents/production_development/mustache/current/compiler.js:12:16)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)

Любая помощь была бы замечательной!


person JonMorehouse    schedule 01.11.2012    source источник
comment
Что за сообщение об ошибке? Вы написали заявление.   -  person Šime Vidas    schedule 01.11.2012
comment
Хм, это не то, что я хочу. Что означает скомпилированная обертка? Я пытаюсь вывести html на терминал   -  person JonMorehouse    schedule 01.11.2012
comment
Что он выводит? Это заявление буквально?   -  person Šime Vidas    schedule 01.11.2012
comment
Только что обновил сообщение об ошибке ... спасибо за любую помощь   -  person JonMorehouse    schedule 01.11.2012
comment
Я не знаком с усами. Вы уверены, что можете предоставить ему значения функций?   -  person Šime Vidas    schedule 01.11.2012
comment
да, если я объявлю шаблон в том же файле в виде строки, он будет компилироваться нормально   -  person JonMorehouse    schedule 01.11.2012


Ответы (1)


Используйте fs.readFile(), чтобы прочитать ваш шаблон как строку. Require не будет работать, если он не требует кода javascript, а не кода усов.

http://nodejs.org/api/fs.html#fs_fs_readfile_filename_encoding_callback

Изменить
Посмотрите, работает ли это ...

var mustache = require("mustache");
var fs = require("fs");

var view = {

    title: "Joe",
    calc: function () {

        return 2+4;
    }

};

fs.readFile('./home.template', 'utf-8', function (err, data) {
  if (err) throw err;
  var output = mustache.to_html(data, view);
  console.log(output);
});
person Stephen    schedule 01.11.2012
comment
Итак, в случае OP {{title}} spend {{calc}} интерпретируется как код JavaScript? Думаю, это имело бы смысл. {{title}} можно интерпретировать как идентификатор внутри оператора блока внутри оператора блока и т. Д. - person Šime Vidas; 01.11.2012
comment
Да, насколько я могу судить, в основном это и происходит. - person Stephen; 01.11.2012
comment
Привет, спасибо, но у меня все еще возникают проблемы, я загружу свой код в этот ответ - person JonMorehouse; 01.11.2012
comment
Вы должны указать кодировку, я сначала этого не делал, извините - person Stephen; 01.11.2012
comment
Код обновлен ... вы также можете рассмотреть возможность использования expressjs - person Stephen; 01.11.2012