mysql - 当 Sequelize.findAll 在另一个文件上时,导出函数不返回数据

标签 mysql express sequelize.js return-value

我从请求查询中获取一些数据,并将请求的参数发送到MySQL数据库。当请求成功时,它返回数据(主 Controller 文件)并代表该数据,我需要调用其他模型类上存在的一些其他函数(通用方法文件) 。 通用方法文件功能也有一定的数据库依赖性。当我从通用方法文件进行调试时,它会按预期返回数据。但它不会从(主 Controller 文件)返回任何数据。我现在应该做什么?

我也尝试用这个方法来转换 async wait 但失败了。

主控文件

    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"
        }
      ]
   }

最佳答案

您的常用方法是异步的,因此您必须返回一个 promise 。

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

关于mysql - 当 Sequelize.findAll 在另一个文件上时,导出函数不返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58623695/

相关文章:

javascript - Node 读取字符串作为对象

javascript - 范围错误: Invalid status code: 0 node js

javascript - Sequelize 创建错误: Cannot read property 'length' of undefined

基于 PHP 的 MySQL 数据库管理器

SQL 查询返回 True/False

mysql - 在 leopard : "Can' t connect to local MySQL server through socket"上安装 mysql

javascript - NodeJS Express 自定义验证器如何在单独的文件中进行 require

javascript - 如何从 Sequelize 模型自动生成迁移

node.js - 按值位置排序 findAll order

mysql - 关联后跟命名范围会产生重复的 SQL 查询