You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js Lambda中,https.request调用后callback应放何处返回响应数据?

我来帮你搞定这个问题,你遇到的核心问题有两个:一是Lambda的callback调用时机不对,二是callback的参数格式不符合规范,咱们一步步来修正:

首先理清楚为什么会出现这两个现象:

  • 在response的end事件里调用callback报错:是因为你把响应内容直接传给了callback的第一个参数(Lambda的callback第一个参数是错误对象,第二个才是成功结果),同时你外部还提前调用了一次callback,导致Lambda提前终止了请求连接。
  • 外部调用callback时dataStr为空:因为这时候https请求还没收到响应,dataStr还没被分块数据填充,自然是空的。

修正后的完整代码

const https = require('https'); // 别忘了引入https模块

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); 
      // 正确调用Lambda callback:第一个参数为null(无错误),第二个为响应内容
      callback(null, dataStr); 
    }); 
  }); 

  req.on('error', err => { 
    // 错误时:第一个参数传错误信息,第二个参数为null
    callback("request error:" + err, null); 
  }); 

  req.write(dataRequest); 
  req.end(); 

  // 删掉这行!这会在请求还没完成时就结束Lambda,导致dataStr为空
  // callback(null,dataStr); 
}

关键修正说明

  1. 移除提前调用的callback
    最后一行的callback(null,dataStr)会在req.end()之后立即执行,此时https请求还在等待响应,dataStr根本没被填充,不仅返回空内容,还会让Lambda提前终止,导致后续响应处理被中断,甚至引发socket错误。

  2. 修正callback参数格式
    Lambda的callback(error, result)规范中,第一个参数是错误对象/信息(无错误时传null),第二个参数才是成功的返回结果。你之前直接传callback(dataStr),相当于把响应内容当成错误返回,不符合Lambda的执行逻辑,这也是引发异常的原因之一。

  3. 确保callback在请求完成后调用
    只有在response的end事件触发时,才说明所有分块数据都已接收完毕,这时候调用callback才能返回完整的dataStr,完全符合异步操作的执行逻辑。

内容的提问来源于stack exchange,提问作者CoderRoller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:24:45