【发布时间】:2017-03-29 13:17:32
【问题描述】:
我正在尝试从 mongo db 加载和显示一些信息。我的网站在 node.js / express 上运行。
我有两个表格,第一个是调色板,我加载并显示所有表格,效果很好。但是对于每个调色板,我都有一个示例列表。我想遍历每个调色板,并获取该调色板的所有示例。
我肯定做错了什么,我认为这是因为 find() 方法是异步的,所以我的数据在提取额外数据之前就被发送了。但是我不能将渲染函数放在示例的回调中,因为它运行了多次。
在 PHP 中,我曾经能够从另一个表中提取数据并基于公共列将其连接到第一个表,但我不知道如何在此处执行此操作,这就是我尝试手动执行此操作的原因有一个循环。
/* GET palette database main page. */
router.get('/', function(req, res, next) {
console.log('rendering test page');
var Palette = require('../models/paletteDatabase');
//load all palettes
Palette.find({}, function(err, palettes) {
if (err) return next(err);
var PaletteExamples = require('../models/paletteExamples');
for (var i = 0; i < palettes.length; i++) {
//split the colors into an array
palettes[i].colorsArray = palettes[i].colors.split(',');
PaletteExamples.find({paletteId: palettes[i]._id}, function(err, result) {
if (err) return next(err);
palettes[i].examples=result;
});
}
res.render('palette-database', {
title: 'Palette List',
palettes: palettes,
css: 'palette-db',
js: 'palette-db'
});
});
});
【问题讨论】:
-
在此行之后发送您的回复
palettes[i].examples=result; -
我不能这样做,因为该行处于循环中,它会被发送多次(或者将在第一次之后发送)
-
那么删除你的for循环并在你的mongo请求中使用'in'查询呢?