快速路由 - 错误 [ERR_HTTP_HEADERS_SENT]:发送给客户端后无法设置 headers

Express Routes - Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

嘿,我正在为我的 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);
         
        });
    });
});

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

扩展之前的答案 (),如果你利用 async/await,它会更清晰。这样,您只需依次调用这两个查询。然后,您可以 return 响应中对象中的数据。以下是您的代码转换为 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});
    });