【问题标题】:Why is one API response returning just an object over and array of objects? [duplicate]为什么一个 API 响应只返回一个对象和对象数组? [复制]
【发布时间】:2021-11-11 20:24:30
【问题描述】:

目前我的 Api 正在返回一个对象而不是数组中的一个对象,但是我似乎无法区分这两种路由之间的区别以及为什么一个会返回所述数据数组而不是另一个。
例如:

router.get('/caseDetail/:id', (req,res) => {
db.caseDetail.findOne({
    include : [db.Part,db.Fault,db.Disposition,db.Contact,db.Site]
}).then((response) => {
    res.json(response);
}).catch((error) => {
    console.table([stack.error,stack.id,error])
})
})

上面的路由返回一个数据数组,而下面的只返回一个对象

router.get('/caseDetail/:caseName', (req,res) => {
    db.caseDetail.findAll({
        
        include : [db.Part,db.Fault,db.Disposition,db.Contact,db.Site],
        where : {
            caseName:{ 
              [Op.like]: req.params.caseName}
        }
    }).then((response) => {
        console.log(response);
        res.json(response)
    }).catch((error) => {
        console.log(error);
    })
})

-------------- 上下文------------ ----------------
我已经多次制定了这种方法,即使在其他脚本文件中也是如此,但我没有被要求以这种方式解析数据,我在看这里有什么变形吗?我错过了 JSON.parse();这里? Github

  try { 
                  const items = await axios.get(`/api/caseDetail/:caseName` + caseName);
                console.log(items.data); 
                $tbody.empty()
                items.data.forEach((item) => {
                    console.log(item);

返回结果

{id: 2, caseName: "1 - Fenway Park - 1", createdAt: "2021-07-27T18:13:55.000Z", updatedAt: "2021-07-27T18:13:55.000Z", UserId: 1, …}

错误信息

TypeError: items.data.forEach is not a function
    at callSearchResults (searchInventory.js:29)

【问题讨论】:

  • 谢谢。看起来像一个对象,所以你不能使用 forEach。
  • 这些结果是在调用我的 API 路由后返回的,给了我数据,但它不会循环遍历它,确保只有 1 个项目被返回,因为数据库中只存在一个项目时刻,但此错误不应持续存在。
  • 如果要使用 .forEach() 循环,则需要以数组形式返回对象
  • 这是一个对象数组,您具体看到的控制台是 items.data 的日志
  • 您显示的日志不是数组。而是一个对象。

标签: javascript jquery foreach axios sequelize.js


【解决方案1】:

如果我对您的理解正确,并且这是您从请求中收到的结果:

{id: 2, caseName: "1 - Fenway Park - 1", createdAt: "2021-07-27T18:13:55.000Z", updatedAt: "2021-07-27T18:13:55.000Z", UserId: 1, …}

然后您需要从中取出条目并像这样迭代它们:

for (const [key, value] of Object.entries(items)) {
  console.log(`${key}: ${value}`);
}

或者像这样:

Object.entries(items).forEach(([key, val]) => console.log(key, val));

【讨论】:

    【解决方案2】:

    forEach() 是为数组设计的,但您可以将集合和对象类型转换为这样的数组...

    var I=[...items];
    
    var D=[...items.data]
    

    现在你应该没事了,试试……

    I.data.forEach((item) => {}
    
    D.forEach(() => {}
    

    【讨论】:

    • 遗憾的是,这导致了一个错误,其中项目不可迭代
    猜你喜欢
    • 2022-11-15
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多