Node.js Express/Mongoose如何将数据填充到HTML选择标记
我可以问一个愚蠢的问题吗?我有一个表单,其中包含需要从MongoDB获取数据的选择列表。首先,我尝试从MongoDB获取数据(我使用Mongoose),将其保存到数组,然后呈现到视图以填充到HTML选择 文件Task.jsNode.js Express/Mongoose如何将数据填充到HTML选择标记,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我可以问一个愚蠢的问题吗?我有一个表单,其中包含需要从MongoDB获取数据的选择列表。首先,我尝试从MongoDB获取数据(我使用Mongoose),将其保存到数组,然后呈现到视图以填充到HTML选择 文件Task.js exports.createForm = function (req, res) { var creators = []; CreatorModel.find({}).populate('id name').exec(function(err, crts) {
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>
但我发现这不好,因为以后我必须精确显示任务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 } ]
Mongoose find()似乎在运行
分配给数组的问题是我无法在回调函数中将json文档obj转换为数组?是否有其他方法可以将日期从MongoDb填充到HTML选择标记?我不太完全理解您的问题,因为这个问题有很多部分,但您似乎在试图避免异步范例。在使用模板呈现mongoose对象之前,可以等待填充mongoose对象 您可以在节点中强制执行异步行为 或者使用QueryStream将其管道化到res.render
稍后,您可以执行数组#映射以将数组转换为哈希。不使用
async
,为什么不直接从回调调用CreatorModel.find()
?
Creators 2: {}
Type: object
Creators: [ { name: 'Jen Smith', _id: 51d3ec2933a3c53c57000001, __v: 0 },
{ name: 'Paul Scholes', _id: 51d3ec3933a3c53c57000002, __v: 0 } ]
async.parallel([
function(callback){
CreatorModel.find({}).exec(function(err, crts) {
creators = crts;
callback(creators);
});
} ], // optional callback
function(err, creators){
res.render('tasks/create-form', {
creators: creators,
assignees: assignees
});
}