【问题标题】:Getting SyntaxError: Unexpected token u in JSON at position 0 when running Lambda Test获取 SyntaxError:运行 Lambda 测试时位置 0 处 JSON 中的意外标记 u
【发布时间】:2019-04-22 08:27:33
【问题描述】:

使用

运行 Lambda 测试
{
  "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');
}

给出以下例外:

请求 ID: "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

似乎是什么问题?

【问题讨论】:

  • event.body 的输出是什么?尝试在开头记录它。
  • 试试不带context.callbackWaitsForEmptyEventLoop = false;,我猜它的目的和你在评论中写的有点不同

标签: node.js amazon-web-services aws-lambda


【解决方案1】:

这是因为当你用一个数据包测试你的 lambda 时,比如说

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

然后将该数据包作为event 传递给处理程序。

但是,你正在做JSON.parse(event.body),但是对于上面的数据包,event.bodyundefined(在位置 0 有标记 u)。

你应该把你的测试包改成:

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

请注意,正文是字符串化的 JSON,因为 API Gateway Lambda 期望事件正文采用字符串化格式。

【讨论】:

  • 根据您的回答,我收到“SyntaxError: Unexpected token o in JSON at position 1”
  • @user829174 更新
【解决方案2】:

如果您查看日志消息,您会看到event.body = undefined。如果您在控制台中尝试JSON.parse(undefined),您将能够看到Uncaught SyntaxError: Unexpected token u in JSON 错误。

就我而言,我需要通过 Gateway API 进行配置以模拟我的响应,因此这就是我在 lambda 函数中所做的:

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;
}

上面创建了一个端点,吐出预定义的模拟响应。

【讨论】:

    【解决方案3】:

    原因可能是你没有在你的函数中使用回调。尝试添加以下内容

    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);
    

    【讨论】:

      猜你喜欢
      • 2018-03-18
      • 1970-01-01
      • 2016-09-04
      • 2016-09-21
      • 1970-01-01
      • 2020-07-02
      • 2021-05-06
      • 2020-04-12
      • 2019-05-22
      相关资源
      最近更新 更多