Где я должен поставить обратный вызов для возврата данных после вызова узла https.request?

Я пытаюсь прочитать содержимое запроса, используя узел http родная библиотека

Я хочу сделать запрос POST, который я уже успешно выполняю, но затем использую сохраненные фрагменты ответа, чтобы вывести их целиком, используя обратный вызов в моей лямбда-функции.

Это мой код:

getData: function (event, context, callback) {

    let inputData = event.body;
    let requestData = Object.assign({}, inputData);

    var dataRequest = 'field='+ requestData.Field1;

    var options = {
        method: 'POST',
        hostname: 'my.hostname.com',
        path: '/', 
        headers: {
            "content-type": "application/x-www-form-urlencoded", 
            "connection" : "keep-alive",
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36",  
        }
    };          

    var dataStr = "";
    var req = https.request(options, function (response) {    
            response.on('data', (chunk) => {dataStr += chunk;}); 
            response.on('end', () => {                   
                console.log(response.statusCode + " " + dataStr);
                //(*) causes "hang up socket error" 
                return callback(dataStr); 
            });            
    });

    req.on('error', err => {          
       return callback("request error:" + err);
    })
    req.write(dataRequest);
    req.end(); //maybe req.end(callback(null,dataStr))?;

    //on commented (*) works fine but dataStr string comes empty
    callback(null,dataStr);
}

Где я могу поставить обратный вызов для вывода dataStr переменное содержимое как ответ этой конечной точки?

Спасибо за понимание.

1 ответ

Для вашего кода правильно поместить метод обратного вызова в обратный вызов "end" и "error", который уже существует. Удалите обратный вызов из конца вашего кода.

Вы можете сохранить обратный вызов в любом месте вашего кода, но если вы хотите вернуть данные, тогда в этом случае лучше сохранить внутренний обратный вызов этой функции.

Еще одна вещь, обратный вызов не завершит выполнение вашего кода, пока вы не вернетесь к основному обработчику

Другие вопросы по тегам