如何从AWS Lambda中的HTTP请求获取输出

时间:2019-12-28 06:14:51

标签: node.js http

exports.handler = async (event) => {

// TODO implement

const https = require('https');
https.get('https://reqres.in/api/users',
res => {
    //console.log(res.statusCode);
    //console.log(res.headers);

    let body = '';

    res.on('data',data =>{
        body += data;
    })

    res.on('end',()=>console.log(body));

})

const response = {
    statusCode: 200,
    body: JSON.stringify(https.get),
};
return response;
};

我遇到了一个错误,看来我无法从todo函数获得输出,因此我尝试了response函数,但它仍然会产生错误。

2 个答案:

答案 0 :(得分:0)

您可以使用回调函数:

exports.handler = (event, callback) => {

  const https = require('https');
  https.get('https://reqres.in/api/users',
    res => {
      let body = '';
      res.on('data', data => {
        body += data;
      });

      res.on('end', function() {
        const response = {
          statusCode: 200,
          body: JSON.stringify(body),
        };
        callback(response)
      });
    });
};

this.handler(null, (res) => console.log(res));

触发end时将调用回调。

答案 1 :(得分:0)

我喜欢诺言方式,解决promise on end事件,拒绝诺言on error事件。

exports.handler = async (event) => {

  const https = require('https');

  try {
    const responseBody = await new Promise((resolve, reject) => {
      https.get('https://reqres.in/api/users',
      res => {
        //console.log(res.statusCode);
        //console.log(res.headers);

        let body = '';

        res.on('data', data => {
          body += data;
        })

        res.on('error', (err) => reject(err));

        res.on('end', () => resolve(body));

      })
    });

    const response = {
      statusCode: 200,
      body: JSON.stringify(responseBody),
    };
    return response;
  } catch(err) {
    const errorResponse = {
      statusCode: 400,
      body: JSON.stringify({ message: err.message }),
    };

    return errorResponse;
  }
}