【问题标题】:how to call rest api inside aws lambda function using nodejs如何使用nodejs在aws lambda函数中调用rest api
【发布时间】:2026-02-12 08:00:02
【问题描述】:

我创建了 aws lambda 函数。我想在我的 lambda 函数中使用 rest api 调用。 有没有参考如何使用nodejs将它连接到rest api

【问题讨论】:

  • 你忘了lambda function 并使用nodejs调用rest api。
  • 我是 nodejs 新手,是否有任何示例可用于使用 ngrok 调用 rest api
  • 您找到解决方案了吗?如果是,请将其更新为您的答案。我也在尝试实现同样的方法。

标签: node.js amazon-web-services aws-lambda


【解决方案1】:

const https = require('https')

// data for the body you want to send.
const data = JSON.stringify({
  todo: 'Cook dinner.'
});

const options = {
  hostname: 'yourapihost.com',
  port: 443,
  path: '/todos',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  },
};

const response = await doRequest(options, data);
console.log("response", JSON.stringify(response));

/**
 * Do a request with options provided.
 *
 * @param {Object} options
 * @param {Object} data
 * @return {Promise} a promise of request
 */
function doRequest(options, data) {
  return new Promise((resolve, reject) => {
    const req = https.request(options, (res) => {
      res.setEncoding("utf8");
      let responseBody = "";

      res.on("data", (chunk) => {
        responseBody += chunk;
      });

      res.on("end", () => {
        resolve(JSON.parse(responseBody));
      });
    });

    req.on("error", (err) => {
      reject(err);
    });

    req.write(data);
    req.end();
  });
}

【讨论】:

    【解决方案2】:

    如果你想在lambda函数中调用rest api,你可以使用request包:

    通过 npm 安装请求包:https://www.npmjs.com/package/request

    然后在 lambda 函数内部尝试调用 rest api:

        var req = require('request');
        const params = {
            url: 'API_REST_URL',
            headers: { 'Content-Type': 'application/json' },
            json: JSON.parse({ id: 1})
        };
        req.post(params, function(err, res, body) {
            if(err){
                console.log('------error------', err);
            } else{
                console.log('------success--------', body);
            }
        });
    

    【讨论】:

    • 我在 lambda 中尝试过,但对我不起作用。在邮递员和 python 脚本中同样的 api 也可以工作。
    • 使用这个我们如何传递 POST API 的正文数据?还有我们如何解析服务的响应?
    【解决方案3】:
    const superagent = require('superagent');
    
    exports.handler =  async(event) => {
        return await startPoint();  // use promise function for api 
    }
    
    
    function startPoint(){
        return new Promise(function(resolve,reject){
        superagent
        .get(apiEndPoint)
        .end((err, res) => {
            ...
    
    
    
           });
        })
    }
    

    【讨论】:

      【解决方案4】:

      如果您想在 lambda 中创建一个 HTTP REST 端点,请使用 节点。这是示例。 https://github.com/serverless/examples/tree/master/aws-node-simple-http-endpoint

      如果您询问使用 lambda 访问外部 API 节点。这是一个例子。

      https://github.com/robm26/SkillsDataAccess/blob/master/src/CallService/index.js

      希望这会有所帮助。

      【讨论】: