【问题标题】:Express Routes - Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the clientExpress Routes - 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头
【发布时间】:2021-12-18 06:44:42
【问题描述】:

嘿,我正在为我的 MERN 应用程序创建一个路由,我想在其中执行两个 find mongoose 背靠背查询。我首先在 params 模型中找到一个具有相同剪辑名称的条目,并且该条目包含一个元素字段(在其架构中定义)。然后我想在元素模型中找到另一个具有相同元素名称的条目。但是我遇到了这个错误。有人可以帮助我。 谢谢

const elementstemplate = require("../models/elements.js");
const paramstemplate = require("../models/params.js");

router.get("/getparams/:clipName", async (req, res) => {
  paramstemplate
    .findOne({ clipName: req.params.clipName })
    .then((params) => {
      
      const fetchedelement = params.element;
      res.json(params);
    })
    .then((fetchedelement) => {
      elementstemplate
        .findOne({ elementName: fetchedelement })
        .then((elementdata) => {
          res.json(elementdata);
         
        });
    });
});

【问题讨论】:

    标签: node.js mongodb express mongoose routes


    【解决方案1】:

    扩展上一个答案 (https://stackoverflow.com/a/69832516/177397),如果您利用 async/await,它将变得更加简洁。这样,您只需要一个接一个地调用这两个查询。然后,您可以在响应中返回对象中的数据。以下是您的代码在转换为 async/await 时的样子:

        const elementstemplate = require("../models/elements.js");
        const paramstemplate = require("../models/params.js");
    
        router.get("/getparams/:clipName", async (req, res) => {
          // Get the params
          const params = await paramstemplate.findOne({ clipName: req.params.clipName });
          
          // Get the element data
          const fetchedelement = params.element;
          const elementdata = await elementstemplate.findOne({ elementName: fetchedelement });
          
          // Return an object with both the params and the element data
          return res.json({ params, elementdata});
        });
    

    【讨论】:

      【解决方案2】:

      您不能在一个请求中发送 2 个响应。在第一个 .then() 中返回 fetchedElement。第二次处理它,然后将两者都作为 json 发送回客户端。但是如果你的回调函数是异步的,你可以使用 await 而不是使用 .then()。

      【讨论】:

        猜你喜欢
        • 2019-12-25
        • 2022-11-30
        • 1970-01-01
        • 2021-09-02
        • 2020-05-26
        • 2018-09-19
        • 2019-12-11
        • 2020-09-22
        • 2023-01-19
        相关资源
        最近更新 更多