我可以问一个愚蠢的问题吗?我有一个表单,其中包含需要来自 MongoDB 的数据的选择列表。首先,我尝试从 MongoDB(我使用 Mongoose)获取数据,将其保存到数组,然后渲染到视图以填充到 HTML Select。
文件 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);
我检查控制台日志,发现“Creators 2”首先打印
Creators 2: {}
Type: object
Creators: [ { name: 'Jen Smith', _id: 51d3ec2933a3c53c57000001, __v: 0 },
{ name: 'Paul Scholes', _id: 51d3ec3933a3c53c57000002, __v: 0 } ]
似乎 Mongoose find() 运行异步..
分配给数组的问题是我无法在回调函数中将 json 文档 obj 转换为数组?还有其他方法可以将日期从 MongoDb 填充到 HTML Select Tag 吗?