0

下面是我的输入表单,我想将 2 个输入的数字作为 POST 发送到 AWS Lambda 并希望添加它们,并且我希望添加数字的响应显示在客户端的浏览器上。请注意,我们使用的是 AWS CodeStar,因此 Lambda 部分不会被我们干扰。

我们的表格截图

为此,我编写了一段代码:

应用程序.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"}

索引.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);
4

1 回答 1

0

有两种方法可以访问您的计算应用程序,
1. 使用 AWS SDK 调用 Lambda 函数
2. 对 HTTP URL 或 AWS API Gateway 端点进行 HTTP 调用(通常是这个)

您不能使用其 URL 调用 AWS Lambda,因为它是一项计算服务,通常由 API Gateway 补充

1. 如何使用 SDK 调用 AWS Lambda -

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. 如何使用 axios 库对 API 网关进行 HTTP 调用-

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);
})
于 2020-02-27T09:07:55.877 回答