Вызов AWS Lambda из браузера с использованием Javascript, как я могу отправить входное значение в функцию? - PullRequest
1 голос
/ 12 апреля 2020

Я пытался вызвать мою AWS лямбда-функцию (через оставшуюся часть Api Gateway), которая написана в Java, которая принимает в качестве входных данных параметр Object, который впоследствии обрабатывается как простая строка. Я проверил это через AWS Lambda Console и через клиент для отдыха, такой как Postman, и он отлично работает. Это мой обработчик Java:

public class LambdaInsertMessage implements RequestHandler<Object, String>{

    @Override
    public String handleRequest(Object obj, Context context) {
        String input = obj.toString();
        //insert input in my database
        return "ok";
    }
}

Теперь я пытаюсь интегрировать его в мою html веб-страницу (которая находится в моем хранилище S3, настроенном для публикации c stati c хостинг). Это мой Javascript фрагмент кода:

    /*
    * Takes the message inserted in the textarea and send it to my Lambda
    */
    function sendMessage() {
        var message = document.getElementById('messageInput').value;
        var xhttp = new XMLHttpRequest();
        xhttp.open("GET", "https://xxx.execute-api.us-east-1.amazonaws.com/insert", true);
        xhttp.send(message);
    }

Это не работает, потому что функция Lambda вызывается правильно, но получает входной пустой объект, а не сообщение, которое я вставил в страница (var message правильно оценена, когда я отлаживаю консоль браузера).

У меня есть еще один лямбда-вызов на странице, которая представляет собой простой привет мир, в котором я не добавляю никаких данных во ввод и Lambda работает правильно, я могу записать ответ, отправленный моей функцией Lambda:

    function helloWorld() {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                console.log(this.responseText);
            }
        };
        xhttp.open("GET", "https://xxxx.execute-api.us-east-1.amazonaws.com/helloWorld", true);
        xhttp.send();
    }

Так что моя проблема в том, что на моей странице html я могу получить данные из своих функций Lambda, но не отправлять входные данные им. Что я делаю не так?

Спасибо за помощь!

1 Ответ

2 голосов
/ 12 апреля 2020

Вы отправляете входные данные в API, если при вызове xhttp.open?

xhttp.open("POST", "https://xxx.execute-api.us-east-1.amazonaws.com/insert", true);
не используется ли метод "POST"
...