首页 > 解决方案 > AWS Lambda:如何在 node.js 中使用 json 正文响应 http 请求

问题描述

我必须使用 AWS Lambda API 中的 Json 正文响应 https 请求。因此,我需要首先读取正文请求并获取一些数据,然后根据这些数据从外部源(api)检索值并发送回响应。

我从这个开始:

exports.handler = async (event) => {
    const id_ses =  event.queryResult.outputContexts[0].name;
    console.log(id_ses);
    const res = {
        statusCode: 200,
        body: JSON.stringify(data),
    };
    console.log(res);
    return  res;
};
//var response = { .... json response

当我不读取请求正文时,我可以发送响应..但是如果我尝试从请求正文中获取数据,则意味着如果我放了这两行,我将无法响应

const id_ses =  event.queryResult.outputContexts[0].name;
console.log(id_ses);

我无法从 Lambda 向外部请求方输出响应……尽管我在测试控制台中取得了良好的结果……

任何我可以看到样本的知识或链接都会很好....

标签: node.jsaws-lambda

解决方案


我尝试根据 AWS 指令更改代码:

const https = require('https')
let url = "https://docs.aws.amazon.com/lambda/latest/dg/welcome.html"

exports.handler = async function(event) {
  const promise = new Promise(function(resolve, reject) {
    https.get(url, (res) => {
        resolve(res.statusCode)
      }).on('error', (e) => {
        reject(Error(e))
      })
    })
  return promise
}

进入 :

var https = require('https');

exports.handler = async function(event) {
    const promise = await new Promise(function(resolve, reject) {        
            console.log(id_cont);
            console.log('starting respondioooo');
            const options = {
                method: 'GET',
                hostname: 'app.respond.io',
                path: '/api/v1/contact/YXM2cTBOUVErST',
                headers: {
                    'Authorization': 'Bearer c5dd82fb9d146a1abb1d149909d816e1046497a54',
                    'Content-Type': 'Application/json'
                },
                'maxRedirects': 20
            };
            console.log(options);
            
            const req = https.request(options, (res) => {
                let body = '';
                console.log('Status:', res.statusCode);
                console.log('Headers:', JSON.stringify(res.headers));
                res.setEncoding('utf8');
                res.on('data', (chunk) => body += chunk);
                res.on('end', (chunk) => {
                    console.log('Successfully processed HTTPS response');
                    body = JSON.parse(body);
                    body = body.data.custom_fields.discount;
                    body = body.replace("%","");
                    console.log(body);
                    resolve(body);  
                });
                res.on('error', (e) => {
                    reject(Error(e));
                });
                req.end();         
            });
             
        console.log(promise);
        return promise; 
};

https 请求仍处于待处理状态超过 60 秒...

知道有什么问题吗???


推荐阅读