Чтение кода DynamodB, который не выполняется в export.handler в лямбда-функции - PullRequest
0 голосов
/ 15 октября 2018

У меня есть лямбда-функция, написанная в node.js, которая возвращает изображение QRCode.Я также пытаюсь прочитать значение из Dynamodb.Однако журналы консоли внутри нее, похоже, не выполняются, что заставляет меня думать, что код не запускается.

Я подозреваю, что это связано с проблемами синхронизации.Но я не уверен, что делать, чтобы это исправить.Код ниже:

var qrImage = require('qr-image');
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region:'us-west-2'});

exports.handler = async(event, context, callback) => {
    var path = event.path;
    var drugId = path.replace(/\//g, '');

    var params = {
    TableName: 'QRCodeInfo',
    Key: {
      "DrugId" : "1234"
    }
  };

  docClient.get(params, function(err,data) {  //does not get executed
    if (err) {
      console.log(err);
    } else {
      console.log(data);
    }
  });

    return sendRes(200,drugId); //this works. Image is seen.
};

const sendRes = (status, body) => {
  //console.log(body);
  const svg_string = qrImage.imageSync(body, { type: 'svg', size: 10 });
  var response = {
    statusCode: status,
    headers: {
      "Content-Type": "image/svg+xml"
    },
    body: svg_string
  };
  return response;
};

1 Ответ

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

Вы, вероятно, выходите из лямбды до того, как будет выполнен обратный вызов вызова динамодера.

Попробуйте вызвать callback(null, data) в обратном вызове вызова динамо после вашего console.log и аналогичных всценарий ошибки, например callback(err)

Вы не выходите из лямбды, вызывая return, вы должны звонить callback() (поэтому он доступен в качестве третьего аргумента лямбды), см. https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html#nodejs-prog-model-handler-callback

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...