NodeJs API用不完整的对象响应

阿努拉格

我正在尝试使用NodeJ来实现API,该NodeJs从数据库集合中读取数据,并再次形成该数据从另一个集合中读取各自的数据,并使用新的键值对更新同一对象。

对象已成功更新,但是我在Frontend上收到的API响应未使用第二个集合值进行更新。

router.get('/exam/:_id' , (req , res) => {
    ExamModel.find({
        userId: req.params._id
    })
        .then(doc => {
            let i=0;
            for(let data of doc){
                i=i+1;
                ResponseModel.find({examId: data._id}).countDocuments()
                   .then(count=>{
                        data.responseCount= count;
                        if(i===doc.length){
                           res.json(doc)
                        }
                    })
                    .catch(err => {
                        res.status(500).json(err)
                    })

            }
        })
        .catch(err => {
            res.status(500).json(err)
        })
})

从ExamModel收到的对象是

[
    {
        _id: "012",
        responseCount: 0,
        data: [array]
    },
    {
        _id: "015",
        responseCount: 0,
        data: [array]
    }
]

在ResponseModel之后,对象变成

[
    {
        _id: "012",
        responseCount: 5,
        data: [array]
    },
    {
        _id: "015",
        responseCount: 2,
        data: [array]
    }
]

但是作为api的响应,我得到的是第一个对象而不是第二个。

而且我也出现错误

(node:15012) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:470:11)
毗湿奴

doc查询返回对象将处于不可变状态。为了修改该对象,您需要先将其转换为普通的javascript对象。

您可以在for循环之前执行以下操作

const result = doc.map(d => d.toObject());

现在,您可以result在循环中使用该对象,并修改结果对象。

关于ERR_HTTP_HEADERS_SENT错误。for循环将在count查询返回promise之前很长时间完成迭代。这将使if(i===doc.length)条件多次满足。

您可以使用如下所示的async / await函数来解决此问题

router.get("/exam/:_id", async (req, res) => {
  try {
    const doc = await ExamModel.find({ userId: req.params._id });
    const result = doc.map((d) => d.toObject());
    for (let data of result) {
      const count = await ResponseModel.countDocuments({ examId: data._id });
      data.responseCount = count;
    }
    res.json(result);
  } catch (err) {
    console.log(err);
    res.status(500).json({ message: "Interval Server Err" });
  }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何制作使用不完整类型对象的函数

来自分类Dev

GCC元组“无效使用不完整类型”

来自分类Dev

取消引用不完整类型的指针

来自分类Dev

取消引用不完整类型C的指针

来自分类Dev

取消引用不完整类型的指针

来自分类Dev

GCC元组“无效使用不完整类型”

来自分类Dev

前向声明类/无效使用不完整类型

来自分类Dev

为什么我们允许使用不完整类型的地址?

来自分类Dev

我可以使用不完整类型列表的迭代器吗?

来自分类Dev

用不完整的输入拆分为data.frame

来自分类Dev

Rails:使用不完整的文件名打开文件

来自分类Dev

错误:在内核模块中取消引用不完整类型的指针

来自分类Dev

无效使用不完整的类型和前向声明

来自分类Dev

无效使用不完整类型,引用vs指针

来自分类Dev

Raspberry Pi C ++错误:无效使用不完整类型

来自分类Dev

C ++结构“不允许使用不完整的类型”

来自分类Dev

使用std :: tuple_element时无效使用不完整类型的问题

来自分类Dev

在Eigen中使用CwiseBinaryOp时如何摆脱“无效使用不完整类型”

来自分类Dev

使用不完整类型的功能模板实例化

来自分类Dev

模板类和“无效使用不完整类型”错误

来自分类Dev

C取消引用不完整类型结构的指针

来自分类Dev

使用熊猫使用不完整数据的数据帧的get_dummies

来自分类Dev

错误:取消引用不完整类型的指针-C语言

来自分类Dev

C ++中不允许使用不完整的类型

来自分类Dev

使用C ++ 11 std :: async在android ndk中无效使用不完整类型

来自分类Dev

Rails:使用不完整的文件名打开文件

来自分类Dev

类的前向声明/无效使用不完整的类型

来自分类Dev

交换程序中不允许使用不完整的类型

来自分类Dev

无效使用不完整类型进行部分模板专业化C ++

Related 相关文章

  1. 1

    如何制作使用不完整类型对象的函数

  2. 2

    GCC元组“无效使用不完整类型”

  3. 3

    取消引用不完整类型的指针

  4. 4

    取消引用不完整类型C的指针

  5. 5

    取消引用不完整类型的指针

  6. 6

    GCC元组“无效使用不完整类型”

  7. 7

    前向声明类/无效使用不完整类型

  8. 8

    为什么我们允许使用不完整类型的地址?

  9. 9

    我可以使用不完整类型列表的迭代器吗?

  10. 10

    用不完整的输入拆分为data.frame

  11. 11

    Rails:使用不完整的文件名打开文件

  12. 12

    错误:在内核模块中取消引用不完整类型的指针

  13. 13

    无效使用不完整的类型和前向声明

  14. 14

    无效使用不完整类型,引用vs指针

  15. 15

    Raspberry Pi C ++错误:无效使用不完整类型

  16. 16

    C ++结构“不允许使用不完整的类型”

  17. 17

    使用std :: tuple_element时无效使用不完整类型的问题

  18. 18

    在Eigen中使用CwiseBinaryOp时如何摆脱“无效使用不完整类型”

  19. 19

    使用不完整类型的功能模板实例化

  20. 20

    模板类和“无效使用不完整类型”错误

  21. 21

    C取消引用不完整类型结构的指针

  22. 22

    使用熊猫使用不完整数据的数据帧的get_dummies

  23. 23

    错误:取消引用不完整类型的指针-C语言

  24. 24

    C ++中不允许使用不完整的类型

  25. 25

    使用C ++ 11 std :: async在android ndk中无效使用不完整类型

  26. 26

    Rails:使用不完整的文件名打开文件

  27. 27

    类的前向声明/无效使用不完整的类型

  28. 28

    交换程序中不允许使用不完整的类型

  29. 29

    无效使用不完整类型进行部分模板专业化C ++

热门标签

归档