我计算数据库的结果数量并发送为' TotalItems'
mysql_crawl.query('SELECT COUNT(*) FROM `catalogsearch_fulltext` WHERE MATCH(data_index) AGAINST("'+n+'") ', function(error, count) {
var r = count[0];
var totalItems = r,
res.render('result.html', {
totalItems: totalItems
})
});
我尝试在r上运行console.log,结果是
RowDataPacket { 'COUNT(*)': 25 }
但是当我运行<%totalItems%>在javascript上,它显示为
[object Object]
如何将对象显示为数字?
答案 0 :(得分:5)
totalItems是对象,您可以通过totalItems['COUNT(*)']
答案 1 :(得分:1)
告诉模板引擎渲染对象会将对象强制转换为字符串。这是通过查看对象以查看它是否实现toString()
方法来完成的,如果没有,则会遍历对象的原型链,直到找到它为止。
在您的示例中,最接近的toString
位于顶级基元Object
上。此实现只输出[object Object]
。关于此的最佳信息是on MDN。
您可以实现自己的toString
,甚至将count
对象包装在具有名称和自定义toString
的自定义对象中。但在你的情况下,你被赋予了一个通用对象,并且(大概)不是在更多面向对象的设计模式中抽象代码的层次。在这种情况下,使用JSON.stringify
包装模板代码更容易,它会将任何对象序列化为包含JSON数据的字符串,这对开发人员来说是人类可读的:
<% JSON.stringify(totalItems, null, 2) %>
答案 2 :(得分:0)
[object Object]
来自.toString()
函数。示例:{ a: 1 }.toString()
。
您需要将其封装在JSON.stringify(...)
中,例如:JSON.stringify({ a: 1 })
=&gt; { "a": 1 }
。
答案 3 :(得分:0)
要完整打印Object
或Array
,您可以使用:
JSON.stringify(obj, null, 4);
这会将给定Object的String
表示形式返回为树。
例如:
{a: 1, b: 2, c: {d: 4}}
变为:
{
"a": 1,
"b": 2,
"c": {
"d": 4
}
}