我在快速路由中运行了一个比较复杂的序列化查询,之后需要运行第二个查询,以将所需的数据附加到返回的结果中:
//Get inboxes based on passed params
router.get('/:data', function(req, res, next) {
let passedData = JSON.parse(req.params.data);
models.fas.findAll({
where: { current_stop: { $like: '%'+passedData.current_stop +'%'},
cert_class: { $like: '%'+passedData.cert_class +'%'},
fis_yr: { $like: '%'+passedData.fis_yr +'%'},
work_loc: { $like: '%'+passedData.work_loc +'%'},
action_cd: { $like: '%'+passedData.action_cd +'%'},
form_num: { $like: '%'+passedData.form_num +'%'},
form_id: 'HRTF' },
include: [
{ model: models.form, as: 'form' },
{ model: models.form_status, as: 'form_status' },
{ model: models.action_codes, as: 'action_codes' }
],
order: ['form_num']
}).then(function(response){
response.forEach( item ) => {
models.employees.findAll({
attributes: [ 'fname', 'mname', 'lname' ],
where: { empl_id: item.form[0].empl_id },
order: [ 'empl_id' ]
}).then(function(response){
item.readableName = response;
});
});
}).then(function(response){
res.send(response);
}).catch(function(error) {
return next(error);
});
});
在这里(当前设置)存在的问题是,在调用res.send(response)之前,我需要forEach完成附加数据。如果我从该代码中删除最后一个.then()并将res.send与循环放在同一块中,则其余数据将正确发送,但employees表中未显示任何结果。但是,使用上面设置的方法,没有任何内容发送到我尝试发送的响应对象。
我的问题是双重的
第一
employees表没有任何与原始表(fas)匹配的列。因此,据我了解,我无法在两者之间建立关联(这将消除对forEach的需求)。是真的吗?
第二:
如果循环是执行此操作的正确方法,我如何将结果从forEach返回到下一个.then,然后使用res.send()将其发送?
答案 0 :(得分:0)
嗯,像往常一样,我在发布此消息后不久想到了一个解决方案。事实证明,您可以在Sequelize中使用嵌套包含,并且在employee表和我已经在使用的另一个表之间有一个关联。解决方案如下:
//Get inboxes based on passed params
router.get('/:data', function(req, res, next) {
let passedData = JSON.parse(req.params.data);
models.hrtf_fas.findAll({
where: { current_stop: { $like: '%'+passedData.current_stop +'%'},
cert_class: { $like: '%'+passedData.cert_class +'%'},
fis_yr: { $like: '%'+passedData.fis_yr +'%'},
work_loc: { $like: '%'+passedData.work_loc +'%'},
action_cd: { $like: '%'+passedData.action_cd +'%'},
form_num: { $like: '%'+passedData.form_num +'%'},
form_id: 'HRTF'
},
include: [
{ model: models.form, as: 'form',
include: [{
model: models.employees, as: 'employees',
attributes: [ 'fname', 'lname' ]
}]
},
{ model: models.form_status, as: 'form_status' },
{ model: models.action_codes, as: 'action_codes' }
],
order: ['form_num']
}).then(function(response){
res.send(response);
}).catch(function(error) {
return next(error);
});
});
我需要做一些concat,但是我认为这会做的:)