Jade的JS不输出对象属性,但输出_id和__v罚款?

我有一个与Jade模板引擎或其他问题的问题; 我不知道。 当我遍历一个对象并输出它的属性时,它似乎不会输出“country”属性,但输出“ id”和“ _v”属性很好。 我期望“部分”属性不输出,因为它本身是一个对象,但它没有在控制台日志中说什么。

架构:

var CSVSchema = { country: {type: String} , sections: [ { title: {type: String} , sub_sections: [ { title: {type: String} , value: {type: String} } ] } ] }; 

search控制器:这在mongodb数据库中search国家(使用mongoose),并呈现翡翠模板传递封闭的属性。

 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对象:这是存储在数据variables中的内容,通过search控制器传递给Jade模板。 出于某种原因,国家财产出现在_id财产之前,而部分不是? 我已经在mongodb中编辑条目,把国家放在_id之后,但是没有解决任何问题。

 { country: 'India', _id: 51cda5163c7286000000000c, sections: [ { sub_sections: [Object], _id: 51cda5163c72860000000011, title: 'Undergraduate' }, { sub_sections: [Object], _id: 51cda5163c7286000000000d, title: 'Postgraduate' } ], __v: 0 } 

Jade模板:为了testingJade的渲染没有问题,我插入了一个testing属性,看它是否输出正常,而且确实如此。

 for result in results - result.test = 'TESTING123' ul li #{result._id} li #{result.test} li #{result.country} li #{result.sections} li #{result.__v} 

输出:

  • 51cd926b46baa54df700000c
  • 是testing123
  • 0

Package.json:我试图降级到玉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" } } 

您传递给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') }) }); 

这也将使您的查询更快。

我已经通过string化和parsing对象解决了这个问题,然后将它传递给Jade模板。

 results = JSON.parse(JSON.stringify(results))