Функция экспорта не возвращает данные, когда Sequelize.findAll на другом файле - PullRequest
0 голосов
/ 30 октября 2019

Я получаю некоторые данные из запроса запроса и с этим запрошенным параметром отправляем в базу данных MySQL . Когда запрос выполнен успешно, он возвращает данные ( Файл основного контроллера ), и от имени этих данных мне нужно вызвать некоторые другие функции, существующие в другом классе модели ( Файл общего метода ). Файл общего метода Функция также имеет некоторую зависимость от базы данных. Когда я отлаживаю из Common Method File , он возвращает данные в соответствии с ожиданиями. Но он не возвращает никаких данных из ( Файл главного контроллера ). Что мне теперь делать?

Я также пытаюсь преобразовать асинхронное ожидание, но оно не работает.

Файл основного контроллера

    const MenuData = require('../../models/common/MenuData');    
    const MenuModel = require('../../models/menu/menuModel');

    exports.listMenu = function(req, res) {
    let menu_id = 0;

    if(req.query.menuID){
        menu_id=req.query.menuID;
        MenuModel.findOne({
            where:{
                id:menu_id
            }
        }).then(menu=>{
                if(menu){
                    let menu_details =  MenuData.menuDetails(menu.dataValues);
                    if(menu_details){
                        return res.send({status: 200, message: menu_details});
                    }else{
                        return res.send({status: 302, message: "Data Not Found"});
                    }
                }
            }).catch(err =>{
            return res.send('error: '+err);
            });
    }else{
        return res.send('error: '+err);;
    }
};

Общий файл метода

    const MenuRelationalModel = require('../../models/menu/menuRelationModel');

    exports.menuDetails=(content_data)=>{
     let data = [];
     if(content_data){
        if(content_data.id && content_data.id == 1){
            MenuRelationalModel.findAll({
                where:{
                    menu_id:content_data.id
                }
            }).then(menu_all_data =>{
                if(menu_all_data){
                    menu_all_data.map((menu_item,index)=>{
                        data.push(menu_item.dataValues);
                    })
                    return data;
                }

            }).catch(err =>{
                data.push(err);
                return data;

            });
        }

      }
   }

Выходной сигнал

   {
    "status": 302,
    "message": []
   }

Ожидаемый результат

   {
     "status": 200,
     "message": [
        {
            "id": 4,
            "menu_id": 1,
            "parent_page_id": 0,
            "page_id": 1,
            "item_title": "Ongoing",
            "item_type": "category",
            "parent_type": "category"
        },
        {
            "id": 5,
            "menu_id": 1,
            "parent_page_id": 0,
            "page_id": 2,
            "item_title": "Completed",
            "item_type": "category",
            "parent_type": "category"
        }
      ]
   }

1 Ответ

0 голосов
/ 30 октября 2019

Ваш обычный метод - асинхронный, поэтому вы должны вернуть обещание.

    const MenuRelationalModel = require('../../models/menu/menuRelationModel');

    exports.menuDetails=(content_data)=>{
      return new Promise((resolve, reject) => {
           let data = [];
           if(content_data){
              if(content_data.id && content_data.id == 1){
                 MenuRelationalModel.findAll({
                     where:{
                        menu_id:content_data.id
                     }
                 }).then(menu_all_data =>{
                    if(menu_all_data){
                        menu_all_data.map((menu_item,index)=>{
                             data.push(menu_item.dataValues);
                        })
                        resolve(data);
                     }
                 }).catch(err =>{
                      data.push(err);
                      resolve(data);    
                 });
             }
          } else {
              resolve(data);
          }
      })
   }

А у вас основной код

if (menu) {
  MenuData.menuDetails(menu.dataValues).then(menu_details => {
    if (menu_details) {
      return res.send({ status: 200, message: menu_details });
    } else {
      return res.send({ status: 302, message: "Data Not Found" });
    }
  });
}
...