как отправить POST-запрос из NodeJS приложения в AWS Lambda? - PullRequest
0 голосов
/ 27 февраля 2020

Ниже приведена моя форма ввода, из которой я хочу отправить 2 введенных числа в виде POST на AWS Lambda и хочу, чтобы они были добавлены, и я хочу, чтобы ответ добавленных номеров отображался в браузере клиента. Отметим, что мы используем AWS CodeStar, поэтому лямбда-часть не может быть нарушена нами.

Screenshot of our form

Для этого я написал код:

app. js

        var express = require('express');
        var app = express();
        const bodyParser = require('body-parser');
        app.use(bodyParser.urlencoded({extended:true}));

        app.get("/", function(req, res) {
          res.sendFile(__dirname+ "/index.html");
        });

        app.post("/", function(req, res) {

        var a = Number(req.body.num1);
        var b = Number(req.body.num2);
        var c = a+b;
        res.send("The sum is" + c);

        });

        // Export your Express configuration so that it can be consumed by the Lambda handler
        module.exports = app

Ошибка, которую мы получаем: {"message":"Forbidden"}

index. html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Calculator</title>
  </head>
  <body>
    <form  action="/" method="post">
      <input type="text" name="num1" placeholder="Enter No. 1">
      <input type="text" name="num2" placeholder="Enter No. 2">
      <button type="submit" name="submit">CALCULATE</button>

    </form>
  </body>
</html>

index. js

'use strict';

const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app')
const server = awsServerlessExpress.createServer(app)

exports.handler = (event, context) => awsServerlessExpress.proxy(server, event, context);

1 Ответ

0 голосов
/ 27 февраля 2020

Существует два способа получить доступ к вашему вычислительному приложению:
1. Использование AWS SDK для вызова лямбда-функции
2. Выполнение HTTP-вызова с URL-адресом HTTP или конечной точкой шлюза API AWS ( обычно это один)

Вы не можете вызвать AWS Lambda, используя его URL, потому что это вычислительная служба и обычно дополняется API Gateway

1. Как вызвать AWS Lambda с помощью SDK -

let AWS = require('aws-sdk');
let util = require('util');

let test = async () => {

    try {
        let client = new AWS.Lambda({
            region: "us-east-1"
        });

        let payload = {
            "some_key" : "some_value"
        };

        payload = JSON.stringify(payload);
        console.log("Payload => ", payload);

        let params = {
            FunctionName: 'some_lambda_function_name',
            InvocationType: "RequestResponse", 
            Payload: payload
        };

        let clientInvoke = util.promisify(client.invoke).bind(client);
        let invokeResponse  = await clientInvoke(params);

        console.log('invokeResponse => ',invokeResponse);
    } catch (error) {
        console.log('error =>\n', error);
    }

};

test();

2. Как сделать HTTP-вызов к API-шлюзу, используя ax ios library-

var axios = require('axios');

var headers = {
    "Content-Type": "application/json"
}

var data = {
    "some_key" : "some_value"
}

var url = "some_url_here";

axios({ method: 'POST', url: url, headers: headers, data: data })
.then((response) => {
    console.log(response.data);
})
.catch((error) => {
    console.log(error);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...