Node.js中循环发送同一HTTP请求仅返回1次响应如何解决
问题原因
你当前的写法本质是在同一个HTTP请求的请求体中追加了3次data内容,而非发起3次独立的HTTP请求,因此只会收到1次服务端响应。https.request方法调用时就会初始化一个单次的请求实例,req.write的作用是往该实例的请求体中追加待发送的数据,不会触发新请求的创建。你循环调用3次req.write,只是把3份data拼接进了同一个请求的请求体中,整个流程仅发起了1次请求,自然只会返回1次响应。
修复方案
将完整的请求创建逻辑移入循环内,每次循环都新建独立的请求实例即可,参考代码如下:
const https = require('https'); // 此处options、data为你已提前定义的请求配置和请求体内容 for(let i = 0; i < 3; i++){ const req = https.request(options, res => { console.log(`statusCode: ${res.statusCode} ${res.statusMessage}`) res.on('data', d => { process.stdout.write(d) }) }) // 监听请求错误,避免异常导致进程退出 req.on('error', error => { console.error(error) }) req.write(data) req.end() // 必须调用end标识请求体写入完成,否则请求不会实际发出 }
注意事项
- 每次发起新请求都需要单独创建
https.request实例 - 不要遗漏
req.end()调用,未调用该方法时客户端会认为还有请求体内容待写入,会持续等待不会发送请求 - 建议为请求绑定
error事件监听,避免请求异常时直接抛出未捕获错误
内容的提问来源于stack exchange,提问作者Andrei Morgovan
相关产品推荐
相关产品推荐

