如何使用手柄助手来打印JSON对象

我有一个对象,我想打印在我的HTML模板(把手)。 该值是来自mysql服务器的计数查询。 这里是查询的函数:

function getGrade7Applicants(req, res, next) { connection.query('SELECT COUNT(*) FROM applications WHERE grade="Grade 7" ', function (err, rows, fields) { if (err) { return next(err); }; req._applications7 = rows; return next(); }); } 

这是我对路由器文件的GET请求:

 router.get('/dashboard', getGrade7Applicants, function (req, res, next) { res.render('admission/dashboard', { applications: { 'grade7': req._applications7 } }); }); 

车把手如下:

 Handlebars.registerHelper('toJSON', function(object){ return new Handlebars.SafeString(JSON.stringify(object)); }); 

最后我的html模板是:

 <div class="alert alert-success" role="alert"> <p style="font-size:75px; text-align:center;">{{toJSON applications.grade7}}</p> <p style="text-align:center;"><strong>7th GRADE Applications<strong> </p> </div> 

毕竟,我的网页上的输出是[{“COUNT(*)”:20}]

我不知道为什么它会打印查询的一部分。 20是我想要打印的正确值。

如上所述,这是属性名称,这里是一些进一步的解释:

如果你有以下查询(我给了计数结果的名称,使显示更友善:

 SELECT COUNT(*) as result FROM applications WHERE grade="Grade 7" 

你应该找回看起来像这样的结果对象:

 [{ "result": "20" }] 

所以当你把它串起来的时候,你会得到包括道具名和括号在内的整个对象作为文本。

你可以传入整个数组,并在模板中遍历它(你有什么),或者只是第一个元素,然后通过模板中的名字访问属性:

 res.render('admission/dashboard', { applications: { 'grade7': req._applications7[0] } }); 

并在模板中:

 {{#if applications}} {{#if applications.grade7}} {{applications.grade7.result}} {{/if}} {{/if}} 

您也可以直接在数据中传递值:

 res.render('admission/dashboard', { applications: { 'grade7': req._applications7[0].result //prop name specified } }); 

并在您的模板中:

 {{#if applications}} {{#if applications.grade7}} {{applications.grade7}} {{/if}} {{/if}} 

除非有特别的原因,否则你不需要使用助手。

这不是查询的一部分..这是字段的名称 – 因为你没有指定一个字段名称,它只是使用“计数(*)”。

你需要改变你的查询,以包括一个名字,你可以像这样工作:

  Select count(*) as app_count from applications... 

然后,您可以通过使用applications.gradet.app_count来获取值来打印值。

我并不是100%确定你想通过对对象进行string化来达到目的,因为你必须重新parsing它才能得到对象属性的值。

我不熟悉车把,所以我可能会把你引到这里。