当 Sequelize.findAll 在另一个文件上时,导出函数不 return 数据
Export Function does not return data when Sequelize.findAll on another file
我从请求查询中获取一些数据,并将请求的参数发送到 MySQL 数据库。当请求成功时,它 returns 数据(Main controller File)&代表该数据我需要调用其他模型 class 上存在的一些其他函数(通用方法文件)。 Common Method File 函数也有一些数据库依赖性。当我从 通用方法文件 进行调试时,它 return 的数据符合预期。但它不会 return 来自( 主控制器文件 )的任何数据。我现在该怎么办?
我也试过这个来转换异步等待,但它失败了。
主控制器文件
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"
}
]
}
你的常用方法是异步的,所以你必须return一个承诺。
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 数据库。当请求成功时,它 returns 数据(Main controller File)&代表该数据我需要调用其他模型 class 上存在的一些其他函数(通用方法文件)。 Common Method File 函数也有一些数据库依赖性。当我从 通用方法文件 进行调试时,它 return 的数据符合预期。但它不会 return 来自( 主控制器文件 )的任何数据。我现在该怎么办?
我也试过这个来转换异步等待,但它失败了。
主控制器文件
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"
}
]
}
你的常用方法是异步的,所以你必须return一个承诺。
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" });
}
});
}