我遇到了Jade模板引擎或其他问题;我不知道。当我遍历一个对象并输出它的属性时,它似乎不输出“country”属性,而是输出“ id”和“ _v”属性。我希望“sections”属性不输出,因为它本身就是一个对象,但它在控制台日志中没有说出任何内容。
架构:
var CSVSchema = {
country: {type: String}
, sections: [
{
title: {type: String}
, sub_sections: [
{
title: {type: String}
, value: {type: String}
}
]
}
]
};
搜索控制器: 这将在mongodb数据库中搜索一个国家/地区(使用mongoose)并呈现Jade模板传递所附属性。
exports.query = function (req, res) {
var query = req.body.query;
results.find({"country": query}, function (err, data){
res.render('search/query', {
title: 'Search Query'
, query: req.body.query
, results: data
, message: req.flash('error')
})
});
}
来自mongodb的JSON对象: 这是存储在数据变量中的内容,通过Search Controller传递给Jade模板。出于某种原因,国家财产出现在_id财产之前,部分不是?我已经编辑了mongodb中的条目,将 _id 放在 _id 之后,并且没有修复任何内容。
{ country: 'India',
_id: 51cda5163c7286000000000c,
sections:
[ { sub_sections: [Object],
_id: 51cda5163c72860000000011,
title: 'Undergraduate' },
{ sub_sections: [Object],
_id: 51cda5163c7286000000000d,
title: 'Postgraduate' } ],
__v: 0 }
翡翠模板: 为了测试Jade的渲染没有问题,我插入了一个测试属性来查看它输出是否正常,并且确实如此。
for result in results
- result.test = 'TESTING123'
ul
li #{result._id}
li #{result.test}
li #{result.country}
li #{result.sections}
li #{result.__v}
输出:
的package.json: 我尝试降级到Jade 0.30.x,它打破了我的模板,说了“身体没有定义?”这句话。
{
"name": "test",
"description": "test",
"keywords": [
"express",
"mongoose",
"mongodb",
"passport"
],
"version": "0.0.1",
"private": true,
"engines": {
"node": "0.10.x",
"npm": "1.2.x"
},
"dependencies": {
"express": "3.3.1",
"jade": "0.31.x",
"mongoose": "3.6.13",
"connect-mongo": "0.3.2",
"connect-flash": "0.1.1",
"passport": "0.1.17",
"passport-local": "0.1.6",
"csv": "0.3.3",
"moment": "2.0.0"
},
"devDependencies": {
"mocha": "1.11.0",
"nodemon": "0.7.8"
}
}
答案 0 :(得分:2)
您传递给Jade模板的data
对象是一个模型实例数组,而不是Jade似乎需要的纯JS对象。最简单的解决方法是使用“精益”Mongoose查询,而不是在查询方法链中插入lean()
调用:
results.find({"country": query}).lean().exec(function (err, data){
res.render('search/query', {
title: 'Search Query'
, query: req.body.query
, results: data
, message: req.flash('error')
})
});
这也可以让您的查询更快。
答案 1 :(得分:2)
我已经通过字符串化和解析对象解决了这个问题,然后再将其传递给Jade模板。
results = JSON.parse(JSON.stringify(results))