使用把手显示来自hapijs中辅助模块的json数据

时间:2015-01-30 11:06:51

标签: javascript handlebars.js hapijs

我有一个小的hapijs应用程序,并希望从帮助程序模块显示json格式的引号,但我无法显示它。

index.js:

server.views({
  engines: {
    html: require('handlebars')
  },
  context: defaultContext,
  relativeTo: __dirname,
  path: './views',
  layoutPath: './views/layout',
  helpersPath: './views/helpers',
  partialsPath: './views/partials',
  layout: false,
  isCached: false
});

server.route({
  method: 'GET',
  path: '/quotes',
  handler: function (request, reply) {
    reply.view('quotes');
  }
});

quotes.html:

<h1>Word of the day by {{{ quotes }}}</h1>
{{{quotes}}}

quotes.js:

module.exports = function () {
    var quotes = [
        { author: "Kobayashi Issa", text: "What a strange thing!<br>to be alive<br>beneath cherry blossoms." },
        { author: "Kobayashi Issa", text: "Summer night--<br>even the stars<br>are whispering to each other." },
        { author: "Kobayashi Issa", text: "Never forget:<br>we walk on hell,<br>gazing at flowers." },
        { author: "Kobayashi Issa", text: "Here<br>I'm here-<br>the snow falling." }
    ];
    var id = Math.floor(Math.random() * quotes.length);
    return quotes[id].text;
};

如果我返回引号[id],我会在浏览器中通过[object Object]'得到'当天的单词'。如果我将把手html更改为{{{quotes.author}}},则为空。有什么东西需要调整车把吗?

我尝试了{{#each quotes}} ... {{/ each}}但它没有循环。如果我返回JSON.stringify(quotes [id]);我通过{“作者”:“Kobayashi Issa”,“文字”获得了当天的话语:“多么奇怪! 要活着 在樱花下。“}

我知道引号会被调用两次。

问候 克劳斯

1 个答案:

答案 0 :(得分:0)

我改变了逻辑,所以我查询postgresql然后将数据传递给视图,利用了很好的npm promise库pg-bluebird,这对我来说更容易阅读。

index.js:

server.route({
  method: 'GET',
  path: '/participants',
  handler: function (request, reply) {
    var res = [];
    pg.connect(db)
      .then(function (connection) {
        cnn = connection;
        return cnn.client.query('select * from participants');
      })
      .then(function (result) {
        cnn.done();
        reply.view('participants', { p: result.rows});
      })
      .catch(function (error) {
        console.log(error);
      });
  }
});

participants.html:

{{#each p }}
    <li>{{this.id}}, {{this.data.name}}, {{this.data.gender}}</li>
{{/each}}

在我的观点中使用诺言库不仅方便,而且还有很多与回调的混淆我自己仍然觉得我不能很好地掌握它。