所以我试图创建一个API来调用一个API。然后将调用另一个API。但我有个错误。我试了所有的办法,但似乎找不到解决办法。
我得到了两次错误:
UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
这是密码。我有相同的代码,但没有forEach(当数据不是数组时),这是可行的。
if (Array.isArray(data)) {
data.forEach(
async (orderData) => {
await shopify.order
.list({ name: orderData.OrderNo._text })
.then(async (order) => {
return await shopify.fulfillment
.updateTracking(
order[0].fulfillments[0].id,
{
tracking_info: {
number:
orderData.tN._text,
url: orderData.tU._text,
company: orderData.tC._text,
},
}
)
.then(async (updatedOrder) => {
return await shopify.fulfillment
.complete(
updatedOrder.order_id,
order[0].fulfillments[0].id
)
.then((fulfilledOrder) => {
res.json(fulfilledOrder);
});
});
})
.catch((err) => res.json(err));
}
);
} else
这是完整的代码:https://jsfidle.net/5qa2l7mu
forEach是一个允许对数组的每个元素调用函数的数组方法。
因此使用aync/await和promission.all()
const childFunction = async (orderData) => {
try {
const order = await shopify.order
.list({ name: orderData.OrderNo._text })
.then((r) => r)
.catch((e) => {
throw e;
});
const updatedOrder = await shopify.fulfillment
.updateTracking(order[0].fulfillments[0].id, {
tracking_info: {
number: orderData.tN._text,
url: orderData.tU._text,
company: orderData.tC._text
}
})
.then((r) => r)
.catch((e) => {
throw e;
});
const fulfilledOrder = await shopify.fulfillment
.complete(updatedOrder.order_id, order[0].fulfillments[0].id)
.then((r) => r)
.catch((e) => {
throw e;
});
return fulfilledOrder;
} catch (e) {
console.log(e);
throw e;
}
};
const getFulfilledOrders = async (req, res) => {
let fulfilledOrders = null;
const promises = [];
try {
if (Array.isArray(data) && data.length) {
data.forEach(async (orderData) => {
const promise = new Promise((resolve, reject) => {
childFunction(orderData)
.then((r) => {
resolve(r);
})
.catch((e) => {
console.log('Error: ', e);
reject(e);
});
});
promises.push(promise);
});
if (promises.length) {
fulfilledOrders = await Promise.all(promises).then((r) => r);
}
}
return res.json(fulfilledOrders);
} catch (error) {
console.log('Error: ', error);
return res.json(error);
}
};
问题内容: 将标头发送到客户端后,无法设置标头。这是请求验证后的后端错误,看起来像标头问题。我为我的项目脏代码感到抱歉,我还需要做其他事情,因此在注释中有一些代码。这是我的代码 您可以在我的代码中发现其他错误,因为我尝试了许多不同的方法。这是passport.js配置文件 这是身份验证的ajax请求 非常感谢你。 问题答案: 这是由于您的代码试图从authenticate函数发送多个响应。 删除其
将标头发送到客户端后,无法对其进行设置。这是我的身份验证post请求后的后端错误。看起来标题有问题。我很抱歉我的项目肮脏的代码,我需要做一些别的事情,所以有一些代码在评论中。这是我的代码 你可以在我的代码中找到其他错误,因为我尝试了许多不同的方法。以下是passport.js配置文件 这是用于身份验证的 ajax 请求 非常感谢。
我在NodeJS中使用Passport.js、Express和Mongoose时遇到了这个奇怪的问题。基本上,即使我只发送了一个头,我还是得到一个错误,说“不能在头被发送到客户端后设置它们”。 我读过其他帖子并尝试过,但没有一个有效。 应用程序。get-res.send与return res.send之间有什么区别吗 错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后,无法设
我正在关注一个关于udemy上的节点.js的课程,这有点过时了,遇到了这些错误,我无法找到解决方案。 我尝试了什么: 使用next(); 在所有if语句中添加返回res 有人能帮我修一下这些吗?我将不胜感激! 提前感谢! 用户名存在错误:错误 [ERR_HTTP_HEADERS_SENT]:在服务器响应.set 上将标头发送到客户端后无法设置标头 (_http_outgoing.js:526:11
问题内容: 我对Node.js相当陌生,遇到了一些问题。 我正在使用Node.js 4.10和Express 2.4.3。 当我尝试访问http://127.0.0.1:8888/auth/facebook时,我将重定向到http://127.0.0.1:8888/auth/facebook_callback。 然后,我收到以下错误: 以下是我的代码: 我可以知道我的代码有什么问题吗? 问题答案:
问题内容: 我对Node.js相当陌生,遇到了一些问题。 我正在使用Node.js 4.10和Express 2.4.3。 当我尝试访问http://127.0.0.1:8888/auth/facebook时,我将重定向至http://127.0.0.1:8888/auth/facebook_callback。 然后,我收到以下错误: 以下是我的代码: 我可以知道我的代码有什么问题吗? 问题答案: