Получение SyntaxError: Неожиданный токен u в JSON в позиции 0 при запуске лямбда-теста - PullRequest
0 голосов
/ 21 октября 2018

работает лямбда-тест с

{
  "var1": "2017-04-17T18:48:03.608Z",
  "var2": "0.45",
  "var3": "0.5"
}

Функция:

exports.handler =  (event, context, callback) => {

    console.log("event.body = " + event.body);
    const {var1, var2, var3} = JSON.parse(event.body);
    const tmpItem = {
        "var_1": var1,
        "var_2": var2,
        "var_3": var3
    };
    console.log('Inserting item');
}

дает следующее исключение:

Идентификатор запроса: "3aa87175-d544-11e8-ab0a-2b268a563fb1 "

Журналы функций:

START RequestId: 3aa87175-d544-11e8-ab0a-2b268a563fb1 Version: $LATEST
2018-10-21T15:16:05.617Z    3aa87175-d544-11e8-ab0a-2b268a563fb1    event.body = undefined
2018-10-21T15:16:05.636Z    3aa87175-d544-11e8-ab0a-2b268a563fb1    SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at exports.handler (/var/task/index.js:18:89)
END RequestId: 3aa87175-d544-11e8-ab0a-2b268a563fb1
REPORT RequestId: 3aa87175-d544-11e8-ab0a-2b268a563fb1  Duration: 82.98 ms  Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 25 MB  
RequestId: 3aa87175-d544-11e8-ab0a-2b268a563fb1 Process exited before completing request

В чем проблема?

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

Это потому, что когда вы проверяете свою лямбду с пакетом, скажите

{
  "var1": "2017-04-17T18:48:03.608Z",
  "var2": "0.45",
  "var3": "0.5"
}

Затем этот пакет передается обработчику как event.

Однако вы делаетеJSON.parse(event.body), но для вышеуказанного пакета event.body равно undefined (с токеном u в позиции 0).

Вам следует изменить свой тестовый пакет на:

{
    "body": "{\"var1\":\"2017-04-17T18:48:03.608Z\",\"var2\":\"0.45\",\"var3\":\"0.5\"}"
}

Обратите внимание, что тело является строковым JSON, поскольку лямбда-интерфейсы API-шлюза ожидают тело события в строковом формате.

0 голосов
/ 22 апреля 2019

Если вы посмотрите на ваше сообщение журнала, вы увидите, что event.body = undefined.Если вы попробуете JSON.parse(undefined) в своей консоли, вы увидите ошибку Uncaught SyntaxError: Unexpected token u in JSON.

В моем случае мне нужно было настроить с помощью Gateway API, чтобы высмеивать мой ответ, поэтому ясделал в моей лямбда-функции:

exports.handler = function(event, context, callback) {
    var testData = getTestData();
    callback(null, { "statusCode" : 200, "body" : JSON.stringify((testData))});
};

function getTestData() {
    var test= [ 
        {
            name: "Name1"
        },
        {
            name: "Name2"
        },
        {
            name: "Name3"
        }
        ];
    return test;
}

Вышеприведенное создает конечную точку, которая выплевывает из предопределенного ложного ответа.

0 голосов
/ 21 октября 2018

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

var response = {
    statusCode: 200,
    headers: {
        "x-custom-header" : "my custom header value"
    },
    body: JSON.stringify(tmpItem)
};

// null is for error - means no error
// response object should be JSON.stringify compatible and has format described above.
callback(null, response);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...