如何在 res.send() 中获得所需的响应?
How to get desired response in res.send()?
我想做的是从 Db 获取详细信息,当我收到响应时,属性名称不应与 Db 相同,因此我正在使用 for 循环。当我尝试控制它时,我得到了想要的响应,但我得到的是空 array/the 数据库的最后数据。谁能帮帮我?
// ------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
})
我想做的是从 Db 获取详细信息,当我收到响应时,属性名称不应与 Db 相同,因此我正在使用 for 循环。当我尝试控制它时,我得到了想要的响应,但我得到的是空 array/the 数据库的最后数据。谁能帮帮我?
// ------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
})