我们正确设置了获取表单的路由returns something similar to this。在问题数组中,我存储了问题对象,但我无法弄清楚如何访问它们。我的代码目前看起来像:
router.route('/:post_id/:q_id')
.get(function (request, response)
{
forms.findById(request.params.post_id,function(error,form)
{
if (error)
{
response.send({error: error});
}
else
{
for (var i in form.questions)
{
if (form.questions[i] == request.params.q_id)
{
questions = form.questions[i];
response.json({singleQuestion: questions});
}
}
}
});
})
这将返回this
我想知道如何获取对象并读取对象中的字段。
答案 0 :(得分:0)
看起来您正在尝试执行以下操作:
router.get('/:formId/:questionId', (req, res) => {
Form.findOne({
_id: req.params.formId,
questions: req.params.questionId
}).populate('questions').then(form => {
if (!form) {
return res.status(404).json({error: 'Form not found'});
};
res.json({
singleQuestion: form.questions.find(q => q._id.toString() == req.params.questionId)
});
}).catch(err => res.status(500).json({error: 'Internal error'}));
});
但是,似乎这条路线设置为检索给定表单的问题对象。对表单“获取”请求进行以下修改可能更为明智:
router.get('/form/:formId', (req, res) => {
Form.findById(req.params.formId).populate('questions').exec((err, data) => {
if (err || !data) {
res.status(404).json({error: 'Form not found'});
} else {
res.json({data});
}
});
});
看看mongoose's docs for populate - 基本上,它会将问题对象交换为问题对象本身。将其视为应用程序端连接。