javascript - Node.js https.request:从回调响应范围访问请求的数据
问题描述
我正在执行 http.request,如果服务器响应错误 500,我想访问在请求期间发送的数据以重试请求。如何从响应回调范围访问 requestBodyData 参数?
见下文:
var arrayofobjects = [
{
"name" : "peter",
"age" : "24"
},
{
"name" : "gleice",
"age" : "19"
},
{
"name" : "pedro",
"age" : "34"
}
];
for(var x=0; x<arrayofobjects.length; x++){
sendModelInputData(arrayofobjects[x]);
}
function sendModelInputData (requestBodyData) {
const req = https.request(connectionInfo, (res) => {
logger.info(`STATUS: ${res.statusCode}`)
logger.debug(`HEADERS: ${JSON.stringify(res.headers)}`)
//how to access requestBodyData from here????
res.setEncoding('utf8');
res.on('data', (chunk) => {
logger.info(`BODY: ${chunk}`);
});
res.on('end', () => {
//console.log('No more data in response.');
});
});
req.on('error', (e) => {
//console.error(`problem with request: ${e.message}`);
logger.error(`problem with request: ${e.message}`);
});
//req.end(postData);
req.end(JSON.stringify(requestBodyData));
}
解决方案
从您的评论中,我意识到您正在更改requestBodyData
之外sendModelInputData
,因此您必须克隆它以保持原始值。您可以使用Object.assign
.
function sendModelInputData (requestBodyData) {
requestBodyData = Object.assign({}, requestBodyData); // Shallow clone
// On retry use requestBodyData which will be the same data you sent
}
检查以下问题,以了解正在发生的事情。
推荐阅读
- python - 为什么除非将 gui 拖到更宽/更大的尺寸,否则 Tkinter 框架不会显示所有三个按钮
- java - 两个不同 LocalContainerEntityManagerFactoryBean 上的 @PersistenceContext 抛出 TransactionRequiredException
- javascript - 如何防止用户通过PayPal购买产品时更改html?
- python - 在 Python 中读取 SendGrid 邮件对象
- flutter - 如何在颤动中显示AppBar下方的警报栏
- sql - 检查数据库中的值是否可用
- python - 如何在python中计算回归误差?
- ios - 如何在swift中找到其他类中的类实例名称?
- xml - 如何根据 Azure Logic App 中的节点名称更新 XML 节点值并删除 XML 节点
- ruby-on-rails - Rails + 谷歌 TTS。Google::Cloud::ResourceExhaustedError 8:收到的消息大于最大值(5250205 与 4194304)