1

我有一个我想在我的 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 是我想要打印的正确值。

4

2 回答 2

2

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

如果您有以下查询(我给计数命名为 result 以使显示更友好:

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}}

除非有非常具体的原因,否则您不需要使用帮助程序。

于 2017-01-27T21:56:39.220 回答
1

这不是查询的一部分.. 那是字段的名称 - 因为您没有指定字段名称,所以它只使用“count(*)”。

您需要更改查询以包含可以使用的名称,如下所示:

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

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

我不是 100% 确定你试图通过对对象进行字符串化来实现什么,因为你必须重新解析它才能得到你的对象属性的值。

我对车把不太熟悉,所以我可能会把你带入歧途。

于 2017-01-27T20:04:15.980 回答