Получение пустого значения из Lambda - PullRequest
0 голосов
/ 11 марта 2020

Новый для AWS и работающий на Lambda с Node.JS

У меня есть следующий код, работающий на моем локальном компьютере, но как только я загрузил в Lambda (через CLI с успешным статусом) .. однако я понял, Это жалоба на index.hanlder вопрос. Следовательно, после Googling я обновил свой код до 2-й версии, он отлично работает со Status 200, но возвращает мне NULL.

Я протестировал локальный код и возвращает мои данные из DynamoDB. В чем здесь ошибка?

Для предоставления дополнительной информации:

  • Мой .zip содержит следующее (index. js, node_modules, package-lock. json, package. json)

Местный код

const express = require('express');
const router = new express.Router();
const awsSDK = require('aws-sdk');
const dynamodb = new awsSDK.DynamoDB({region:'maskedData', apiVersion:'maskedData'});

router.get('/get', (req,res) => {
const params = {
        TableName: "maskedData"
    };
    dynamodb.scan(params, function(err, data){
        if(err){
            console.log(err);
            // callback(err);
            res.send(err);
        } else {
            console.log(data);
            // callback(null, data);
            res.send(data);
        }
    })

})

module.exports = router;

2-я версия

const express = require('express');
const router = new express.Router();
const awsSDK = require('aws-sdk');
const dynamodb = new awsSDK.DynamoDB({region:'maskedData', apiVersion:'maskedData'});

exports.handler = router.get('/get', (req,res) => {
// router.get('/get', (req,res) => {
const params = {
        TableName: "maskedData"
    };
    dynamodb.scan(params, function(err, data){
        if(err){
            console.log(err);
            // callback(err);
            res.send(err);
        } else {
            console.log(data);
            // callback(null, data);
            res.send(data);
        }
    })

})

// module.exports = router
// exports.handler = router;

1 Ответ

1 голос
/ 11 марта 2020

Для использования в качестве лямбды, вам нужно иметь функцию-обработчик, которая имеет событие, контекст и параметр обратного вызова (необязательно). Примерно так:

const express = require("express");
const awsSDK = require("aws-sdk");
const dynamodb = new awsSDK.DynamoDB({"region": "maskedData", "apiVersion": "maskedData"});

exports.handler = async event => {
  const params = {
    "TableName": "maskedData"
  };
  const data = await dynamodb.scan(params).promise();
  return data;
};

aws sdk поддерживает версию обещания, так что вы можете использовать ее вместо основанной на обратном вызове.

...