我在发出请求时遇到以下错误:
抛出新错误('在发送后无法设置标头。'); ^
错误:发送后无法设置标头。 在ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:356:11) 这是我的代码: let event_hub2 = fabric_client.newEventHub(); event_hub2.setPeerAddr(' GRPC://本地主机:7053&#39);
event_hub2.connect();
event_hub2.registerBlockEvent(
(block) => {
var first_tx = block.data.data[0]; // get the first transaction
var header = first_tx.payload.header; // the "header" object contains metadata of the transaction
var channel_id = header.channel_header.channel_id;
if ("mychannel" !== channel_id) return;
console.log('#####inside block listener######');
//console.log(JSON.stringify(block));
//res.send(block);
//res.end(JSON.stringify(block));
// res.json(JSON.parse(block.toString()));
return res.send({
'number':block.header.number.toString(),
'previous_hash':block.header.previous_hash,
'data_hash':block.header.data_hash,
'transactions':block.data.data
})
// do useful processing of the block
},
(err) => {
console.log('Oh snap!');
},
{startBlock:23, endBlock:30, unregister: true, disconnect: true}
);
}).catch((err) => {
console.error('Failed to invoke chain :: ' + err);
});
答案 0 :(得分:0)
当您使用nodejs时会发生这种情况,因为在发送响应后会调用某些异步函数。代码的作用并不重要。使用调试器。
使用--inspect
参数启动您的流程并附加调试器。
请参阅此参考资料以获取帮助:https://nodejs.org/en/docs/inspector/
您需要将Chrome浏览器连接到运行节点进程的主机。
我建议您仔细检查代码,直到找到问题为止。将断点放在设置标题的位置并捕获错误。祝你好运。
答案 1 :(得分:0)
错误:发送后无法设置标头,表示您已经处于正文或已完成状态,但某些功能尝试设置标头或状态代码。检查您的代码是否在已经写入某个正文或已经发送了标题后尝试发送标题。