微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 res.send() 中获得所需的响应?

如何解决如何在 res.send() 中获得所需的响应?

我想要做的是从 Db 获取详细信息,当我得到响应时,属性名称不应与 Db 相同,因此我使用的是 for 循环。当我尝试安慰它时,我得到了所需的响应,但我得到了空数组/数据库的最后一个数据。谁能帮帮我?

// ------display all customer group---->
const displayCustomerGroup = async (req,res,next) =>{
    var results = await Group.findAll();
    var newData ={};
    var data = {};
  
 for(var i = 0; i < results.length ; i++){

    for(const [key,value] of Object.entries(results[i].dataValues)){
        newData[key.replace("cg_","")] = value;  
    
    }
    
    console.log(newData)
  }
  res.json({
    status:"success",message:"Successfully",data:newData 
    })      

}

解决方法

当您使用 Sequelize 模型时,您可以将选项传递给 findAll() 方法。您正在寻找的选项是 attributes 选项。这使您可以选择要返回的列 - 类似于 SQL 中的 SELECT 语句。 Attributes 应该是与列名匹配的字符串数组。

例如:

await Group.findAll({
     attributes: ["Id","Name","CreateDate"]
})

如果需要,您还可以通过传递数组数组来重命名列,其中每个数组的第一个是列的名称,第二个是列的新名称:

await Group.findAll({
     attributes: [["cg_id","Id"],["cg_name","Name"],["cg_date","CreateDate"]]
})

在 SQL 中,这基本上是这样的:

SELECT cg_id AS Id,cg_Name AS Name,cg_date AS CreateDate
FROM Group
,

看起来你有两个循环:你有很多结果(你在外循环中迭代),每个结果都有一组许多键值对(你在内循环中迭代)。内部循环将键值对复制到 newData 中,但如果下一个结果具有相同的键名,它们将覆盖前一个结果的数据。

相反,您需要使用对象数组,并在外循环中逐项填充该列表:

var dataList =[];

for(var i = 0; i < results.length ; i++){
    let dataItem = {};
    for(const [key,value] of Object.entries(results[i].dataValues)){
        dataItem[key.replace("cg_","")] = value;
    }
    dataList.push(dataItem);
}
res.json({
    status:"success",message:"Successfully",data: dataList
})      

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。