Безсерверный узел пропускает запрос https - PullRequest
0 голосов
/ 06 июня 2019

Я хочу отправить запрос https и обработать результат с помощью безсерверной инфраструктуры, но, похоже, он не работает.

Nodejs (без сервера) пропускает мой запрос и переходит непосредственно к последнему результату, не ожидая ответа https

здесь моя функция:

import { APIGatewayEvent, Callback, Context, Handler } from "aws-lambda";
var AWS = require("aws-sdk");
const querystring = require('querystring');
const https = require('https');

const TOKEN: String = "token";

export const hello: Handler = (
  event: APIGatewayEvent,
  context: Context,
  cb: Callback
) => {
function https_request() {

    var postData = querystring.stringify({
      query: "query"
    });

    var options = {
      hostname: 'example.com',
      port: 443,
      path: '/path',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': TOKEN
      }
    };


    return new Promise(function(resolve, reject) {
      console.log("before request")
      var req = https.request(options, (res) => {
        console.log('statusCode:', res.statusCode);
        console.log('headers:', res.headers);

        if (res.statusCode !== 200) {

          // REJECT IF THE RESPONSE WASN'T AS EXPECTED
          return reject(new Error('Request failed'));
        }

        res.on('data', (d) => {

          process.stdout.write(d);
          resolve(d); // RESOLVE ON SUCCESS WITH EXPECTED DATA

        });
      });

      req.on('error', (e) => {
        console.error(e);
        reject(e); // REJECT ON REQUEST ERROR
      });

      // req.write(postData);
      req.end();
    }) 

  }
  let x:any;



async function myAsyncF() {
    x= await https_request();
    console.log(x.body)
    return x.body
  }

  myAsyncF()

  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: x,
      input: event
    })
  };

  cb(null, response);
};

Я использовал асинхронное ожидание, но ничего не возвращается (я должен получить хотя бы ошибку, если есть какой-то король сетевой ошибки)

Вот мой вывод: перед запросом {"statusCode": 200, "body": "{\" input \ ": \" \ "}"}

что-то не хватает?

Заранее спасибо

1 Ответ

1 голос
/ 06 июня 2019

Ни в коем случае вы не решаете свой Promise, я не знаю, что вы считаете "успешным" запросом, но вот пример, который должен помочь вам встать на правильный путь

return new Promise(function(resolve, reject) {
  console.log("before request")
  var req = https.request(options, (res) => {
    console.log('statusCode:', res.statusCode);
    console.log('headers:', res.headers);

    if (res.statusCode !== 200) {
      // REJECT IF THE RESPONSE WASN'T AS EXPECTED
      return reject(new Error('Request failed'));
    }

    res.on('data', (d) => {
      process.stdout.write(d);
      resolve(d); // RESOLVE ON SUCCESS WITH EXPECTED DATA
    });
  });

  req.on('error', (e) => {
    console.error(e);
    reject(e); // REJECT ON REQUEST ERROR
  });

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