node.js https.request:从回调响应范围中访问请求的数据



我正在执行http.request,如果服务器响应错误500,我想访问请求期间发送的数据以重试该请求。如何从响应回调范围访问请求BodyData参数?

请参阅下文:

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));
}

从您的评论中,我意识到您在sendModelInputData之外更改requestBodyData,因此您必须克隆它以保持原始值。您可以使用Object.assign实现这一目标。

function sendModelInputData (requestBodyData) {
    requestBodyData = Object.assign({}, requestBodyData); // Shallow clone
    // On retry use requestBodyData which will be the same data you sent
}

检查以下问题,以了解正在发生的事情。

javaScript通过参考vs.通过值

var reqbody = res.request.body.tostring((;reqbody = json.parse(reqbody(;

最新更新