使用 handlebars 在 hapijs 中显示来自 helper 模块的 json 数据
Display json data from helper module in hapijs using handlebars
我有一个小的 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;
};
如果我 return 引用 [id] 我会在浏览器中得到 'Word of the day by [object Object]'。如果我将车把 html 更改为 {{{ quotes.author }}} 它是空的。 hapijs 中有什么东西需要调整车把吗?
我尝试执行 {{#each quotes}} ... {{/each}} 但它没有循环。如果我 return JSON.stringify(quotes[id]);我通过 {"author":"Kobayashi Issa","text" 获得了每日热词:“多么奇怪的事情!
活着
在樱花下。”}
我知道引用被调用了两次。
问候
克劳斯
我更改了逻辑,因此我查询了 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}}
在我看来,使用 promise 库不仅方便,而且消除了很多与回调的混淆我自己仍然觉得我掌握得不好。
我有一个小的 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;
};
如果我 return 引用 [id] 我会在浏览器中得到 'Word of the day by [object Object]'。如果我将车把 html 更改为 {{{ quotes.author }}} 它是空的。 hapijs 中有什么东西需要调整车把吗?
我尝试执行 {{#each quotes}} ... {{/each}} 但它没有循环。如果我 return JSON.stringify(quotes[id]);我通过 {"author":"Kobayashi Issa","text" 获得了每日热词:“多么奇怪的事情! 活着 在樱花下。”}
我知道引用被调用了两次。
问候 克劳斯
我更改了逻辑,因此我查询了 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}}
在我看来,使用 promise 库不仅方便,而且消除了很多与回调的混淆我自己仍然觉得我掌握得不好。