【问题标题】:"Unexpected token u in JSON at position 0"“位置 0 处 JSON 中的意外标记 u”
【发布时间】:2019-09-18 04:53:37
【问题描述】:

当我在 Postman 上运行端点时,它工作正常并返回它发布的结果,但是当我在 AWS lambda 上使用 TEST 时,它返回错误“位置 0 处 JSON 中的意外令牌 u”。 我在集成请求中检查了在 API 网关上使用 Lambda 代理,这会产生什么影响吗?

这是我的 lambda 函数

'use strict';

const uuid = require('uuid');
const AWS = require('aws-sdk'); // eslint-disable-line import/no-extraneous-dependencies

const dynamoDb = new AWS.DynamoDB.DocumentClient();

module.exports.create = (event, context, callback) => {
  const timestamp = new Date().getTime();
  const data = JSON.parse(event.body);

  if (typeof data.phoneNumber !== 'string') {
    console.error('Validation Failed');
    callback(null, {
      statusCode: 400,
      headers: { 'Content-Type': 'text/plain' },
      body: 'Couldn\'t create item.',
    });
    return;
  }

  const params = {
    TableName: process.env.DYNAMODB_TABLE,
    Item: {
      id: uuid.v1(),

      phoneNumber: data.phoneNumber,
      sub: data.sub,

      createdAt: timestamp,
      updatedAt: timestamp,
    },
  };

  console.log(params);

  // write the lakeSubscription to the database
  dynamoDb.put(params, (error) => {
    // handle potential errors

    if (error) {
      console.error(error);
      callback(null, {
        statusCode: error.statusCode || 501,
        headers: { 'Content-Type': 'text/plain' },
        body: 'Couldn\'t create in dynamoDb.',
      });
      return;
    }

    // create a response
    const response = {
      statusCode: 200,
      body: JSON.stringify(params.Item),
    };
    callback(null, response);
  });
};

【问题讨论】:

  • 您确定您在event.body 中收到了您认为应该收到的内容吗?你试过记录它吗?
  • Jason,这通常意味着输入的 JSON 格式有问题。你能验证你的测试 JSON 吗?它可能会帮助你。
  • @9000 我正在记录它,但只是填充了错误。我的结果未定义吗? -“错误调用错误 {“errorType”:“SyntaxError”,“errorMessage”:“JSON 中位置 0 的意外标记 u”,“stack”:[“SyntaxError:JSON 中位置 0 的意外标记 u”,”在 JSON .parse ()"
  • Jason,首先,如果您看到 JSON,则没有您要解析的“body”键。无需使用 event.body。只需使用事件。其次,来自 AWS 测试事件的输入已经是 JSON 对象,您不需要再次解析它。请删除 JSON.parse 并控制事件。如果有帮助,请告诉我。
  • @HassanMurtaza 谢谢!有效。发布它,我会投票给它

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


【解决方案1】:

首先,如果您看到您提供的 JSON:

{ "phoneNumber": "+11231231234", "sub": [ { "Name": "Tillery" }, { "Name": "Bob" } ] }

没有 body 键。您可以只使用 event 而不是 event.body。喜欢

console.log(event);

来自 AWS 测试事件的输入已经是 JSON 对象,您不需要再次解析它。

请删除 JSON.parse,你会好起来的。

谢谢!

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2019-08-30
    • 2018-01-29
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    相关资源
    最近更新 更多