我正在执行简单的 API 提取,但收到以下错误:
UnhandledPromiseRejectionWarning:Error[ERR_HTTP_HEADERS_SENT]:无法在将标头发送到客户端后删除它们
,我不确定发生这种情况的原因:
代码在下面,还提供了错误的打印屏幕。我不确定这是否与nodejs的异步行为有关:
var express = require('express');
var router = express.Router();
var axios = require('axios');
const NodeCache = require('node-cache');
const myCache = new NodeCache();
let hitCount = 0;
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.get('/hello', async function(req, res, next) {
const allData = myCache.get('allData');
if (!allData) {
hitCount++;
console.log(`hit ${hitCount} number of times`);
try {
const { data } = await axios.get(
'https://api.vesselfinder.com/vesselslist?userkey=KEY'
);
const [ metaData, ships ] = data;
myCache.set('allData', data, 70);
console.log(data + 'This is the data');
res.send(data);
} catch (error) {
res.send(error);
console.log(error);
}
}
console.log('this is the data:', allData);
res.send(allData);
});
module.exports = router;
到目前为止,我解决这个错误的方法是:
我使用了这个来源,它对错误类型的广泛解释解释了问题所在。然而,理解发生了什么是没有用的。
我还发现这很有用,这也很有用,但最后一个特别是一个缺失语句< code>return的代码错误。我的错误似乎与< code > type error:data is not iterable 有关,但这是不可能的,因为我提供的订阅工作正常。
我找到的最接近的帖子基本上是这样的:“有时这是由于nodejs的异步行为而发生的。”现在我看到这发生在我身上,但我不知道在这种情况下如何解决。
为了完整起见,错误日志也显示在下面的打印屏幕中:
我能做什么来处理这个错误?我做了很多研究,但我不确定如何处理< code>nodejs的异步行为。谢谢你为解决这个问题指出了正确的方向。
您收到此错误是因为您正在调用res。多次发送()
:
router.get('/hello', async function(req, res, next) {
const allData = myCache.get('allData');
if (!allData) {
hitCount++;
console.log(`hit ${hitCount} number of times`);
try {
const { data } = await axios.get(
'https://api.vesselfinder.com/vesselslist?userkey=KEY'
);
const [ metaData, ships ] = data;
myCache.set('allData', data, 70);
console.log(data + 'This is the data');
res.send(data); // <-- FIRST TIME
} catch (error) {
res.send(error);
console.log(error);
}
}
console.log('this is the data:', allData);
res.send(allData); // <-- SECOND TIME
});
呼叫res。send()
将结束响应,因此您不能再次调用它。
您可以将第二个调用包装在else
条件中,以确保只调用一个:
router.get('/hello', async function(req, res, next) {
const allData = myCache.get('allData');
if (!allData) {
// ...
}
else {
console.log('this is the data:', allData);
res.send(allData); // <-- SECOND TIME
}
});
所以我看到了一篇很棒的帖子“错误:发送到客户端后无法设置标题,但仍然不明白我的“标题”部分有什么问题,因为当我将它从注释掉的
我在NodeJS中使用Passport.js、Express和Mongoose时遇到了这个奇怪的问题。基本上,即使我只发送了一个头,我还是得到一个错误,说“不能在头被发送到客户端后设置它们”。 我读过其他帖子并尝试过,但没有一个有效。 应用程序。get-res.send与return res.send之间有什么区别吗 错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后,无法设
我得到状态代码201,但是当我尝试重定向到approval_url时,我得到 错误[ERR_HTTP_HEADERS_SENT]:无法在发送到客户端后设置标头 当我手动单击approval_url时,我尝试不重定向,所有工作都很好。 服务器启动!{id:'payid-l3azrlq4la763246g079113e',意图:'sale',状态:'created',付款人:{payment_meth
c:\ Users \ KUMAR \ Desktop \ digitel mall \ node _ modules \ MySQL \ lib \ protocol \ parser . js:437 throw err;//重新抛出非MySQL错误^ 错误[ERR_HTTP_HEADERS_SENT]:将标头发送到位于的server response . set header(_ HTTP
这是我的代码 有人知道错误是什么吗 错误[ERR_HTTP_HEADERS_SENT]:在serverresponse.json(/home/runner/boilerplate-project-issuetracker/node_modules/express/lib/response.json(/home/runner/boilerplate-project-issuetracker/node
问题内容: 我对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。 然后,我收到以下错误: 以下是我的代码: 我可以知道我的代码有什么问题吗? 问题答案: