快速路由 - 错误 [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});
});
嘿,我正在为我的 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().
扩展之前的答案 (
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});
});