Lambda始终返回200

时间:2018-07-29 10:32:15

标签: node.js aws-lambda amazon-dynamodb

当我为Lambda函数提供一个用于GetItem调用的无效主键时,它似乎一直在搜索该键,直到超时为止,但是它仍然只返回200(没有响应主体)。

是否有任何方法可以确保函数在遍历表一次后中止而没有找到键并返回错误消息呢?一次又一次地查看直到超时,似乎浪费了功能时间?此外,它在1000毫秒后超时,这不是我的函数超时设置,这使我认为这里有除常规超时之外的其他事情。

代码:

'use strict';

const AWS = require('aws-sdk');

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

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

  const done = (err, res) => {

    const response = {
      statusCode: err ? '400' : '200',
      body: err ? JSON.stringify(err) : JSON.stringify(res)
    }

    callback(null, response);

  };

  const groupId = event.pathParameters.groupId;
  const eventId = event.pathParameters.eventId;

  docClient.get({
      TableName: 'events',
      Key: {
        groupId,
        eventId
      }
   },
    (err, data) => {
      done(err, data.Item);
    });
};

1 个答案:

答案 0 :(得分:0)

  

在理想情况下,我希望函数在“意识到”提供了错误的主键后停止运行,然后返回一些错误,告诉客户它无法在表中找到项目用那个主键,是的!

这只有在我们让数据库操作完成的情况下才会发生!因此,我们必须依赖于数据库的响应。

这是我们可以做的:基于根据响应返回错误,无论是200还是400!

要检查Lodash的 res isEmpty方法,并使用您的done function返回400。

'use strict';

const AWS = require('aws-sdk');

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

const { isEmpty }  = require('lodash');

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

  const done = (err, res) => {

    const response = {
      statusCode: (err || isEmpty(res)) ? '400' : '200',
      body: err ? JSON.stringify(err) : JSON.stringify(res)
    }

    callback(null, response);

  };

  const groupId = event.pathParameters.groupId;
  const eventId = event.pathParameters.eventId;

  docClient.get({
      TableName: 'events',
      Key: {
        groupId,
        eventId
      }
   },
    (err, data) => {
      done(err, data.Item);
    });
};

希望这可以解决您的查询!