Отправка результатов sequelize через экспресс после выполнения цикла forEach - PullRequest
0 голосов
/ 21 ноября 2018

У меня несколько сложный запрос секвелизации, выполняющийся по экспресс-маршруту, и мне нужно выполнить второй запрос впоследствии, чтобы добавить необходимые данные к возвращаемому результату:

//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);
  });

});

Проблема I 'Здесь (с текущей настройкой) мне нужно, чтобы forEach завершил добавление данных, прежде чем я вызову res.send (response).Если я возьму последний .then () из этого кода и добавлю res.send в тот же блок, что и цикл, остальные данные будут отправлены правильно, но результаты из таблицы сотрудников не отображаются.Однако, как описано выше, на объект ответа, который я пытаюсь отправить, ничего не отправляется.

Мой вопрос двоякий

Первый:

В таблице сотрудников нет столбцов, соответствующих исходной таблице (fas).Из-за этого я понимаю, что не могу установить связь между ними (что избавит от необходимости в forEach).Это правда?

Секунда:

Если цикл является правильным способом сделать это, как я могу вернуть результаты из forEach в следующий .then иотправить его с помощью res.send ()?

1 Ответ

0 голосов
/ 21 ноября 2018

Ну, как обычно, я подумал о решении вскоре после публикации.Оказывается, вы можете использовать вложенные включения в Sequelize, и у меня есть связь между таблицей сотрудников и другой таблицей, которую я уже использовал.Решение выглядит так:

//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);
  });
});

Мне нужно сделать несколько конкататов, но я думаю, что это подойдет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...