我可以問一個愚蠢的問題嗎?我有一個表單,其中需要有來自MongoDB的數據。首先我嘗試從MongoDB獲取數據(我使用Mongoose),將其保存到數組,然後渲染以查看填充到HTML Select。Express/Mongoose如何將數據填充到HTML選擇標記
文件Task.js
exports.createForm = function (req, res) {
var creators = [];
CreatorModel.find({}).populate('id name').exec(function(err, crts) {
console.log("Creators:", crts);
creators = crts;
});
res.render('tasks/create-form', {
creators: creators
});
};
文件模板
<p>
Creator:
<select id="creatorlist" name="creator">
{{#each creators}}
<option value="{{id}}">{{name}}</option>
{{else}}
<option value="">No creators</option>
{{/each}}
</select>
<a href="/creator/new">New Creator</a>
</p>
但如果我嵌入渲染功能爲回調,它的工作原理
CreatorModel.find({}, function(err, creators) {
AssigneeModel.find({}, function(err, assignees) {
res.render('tasks/create-form', {
creators: creators,
assignees: assignees
});
});
});
但我覺得這也不行,因爲後來我必須顯示任務ID的確切值,並且很難改善代碼
然後我修改我的代碼在控制檯日誌有點
var creators = {};
CreatorModel.find({}).exec(function(err, crts) {
console.log("Type:", typeof(crts));
creators = crts;
console.log("Creators:", creators);
});
console.log("Creators 2:", creators);
我檢查,發現「創2」印刷的第一
Creators 2: {}
Type: object
Creators: [ { name: 'Jen Smith', _id: 51d3ec2933a3c53c57000001, __v: 0 },
{ name: 'Paul Scholes', _id: 51d3ec3933a3c53c57000002, __v: 0 } ]
看來,貓鼬發現()運行ASYN。 。
與分配給陣列的問題是我不能轉換JSON文件obj轉換爲數組中的回調函數?是否有其他方法來從MongoDb到HTML選擇標記填充日期?
而不是使用'async',爲什麼不叫'res.render()'從回調至'CreatorModel.find()'? – robertklep