调用Node 8.10 Lambda时无效的JSON

时间:2018-10-08 04:45:48

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

成功登录后,我正在使用带有cognito的lambda写入dynamoDB。

节点8.10的承诺和asycn/await的布局不同。 callback(null, event)退货不适用于我。现在任何人如何用节点8.10解决Invalid lambda function output : Invalid JSON问题。

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
//AWS.config.update({region: 'REGION'});
// Create DynamoDB document client
var docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});

exports.myHandler = async (event, context, callback) => {
    // TODO implement
    console.log ("Authentication successful");
    console.log ("Trigger function =", event.triggerSource);
    console.log ("User pool = ", event.userPoolId);
    console.log ("App client ID = ", event.callerContext.clientId);
    console.log ("User ID = ", event.userName);

    const params = {
        TableName: 'xxxx',
        Item: {
                'userId': event.userName,
                'systemUpdateDate': new Date().toJSON()
            }
        };

    let putItem = new Promise((res, rej) => {
      docClient.put(params, function(err, data) {
        if (err) {
          console.log("Error", err);
        } else {
          console.log("Success", data);
        }
      });
    });

    const result = await putItem;
    console.log(result); 

    // Return to Amazon Cognito
    callback(null, event);
};   

谢谢

1 个答案:

答案 0 :(得分:0)

使用建议的async/await的Node 8方法,您应该使用以下方法来构造函数:

async function handler(event) {
  const response = doSomethingAndReturnAJavascriptObject();
  return response;
}

您会收到此错误,因为返回的内容都不是可以解析为JSON对象的内容。

没有看到您的代码,很难进一步调试。我希望您可能不会偶然地await正在使用.promise()版本的dynamo / cognito API调用,这将导致您返回Promise而不是结果。

n.b。您仍然可以在节点8上使用'old'callback()方法,如果发现更简单的话。