Запрос DynamoDB возвращает пустой объект при вызове с http-сервера в node.js - PullRequest
0 голосов
/ 30 января 2020

Я node.js ученик. Я написал локальный файл, который подключится к сервису Dynamo DB из моего локального m / c и выполню запрос. Я экспортировал функцию, выполняющую запрос. Теперь я создал http локальный сервер в node.js и вызвал экспортированную функцию, которая будет вызывать запрос динамо-базы данных. Я использовал обещание во время выполнения запроса к Dynamo DB, но получая пустой объект. когда я выполняю функцию запроса динамодаба автономно, это означает, что просто вызывая функцию из того же файла, она возвращает значения, как и ожидалось, но при вызове функции с http-сервера я сталкиваюсь с проблемой пустого объекта.

var AWS = require("aws-sdk");
var awsConfig = {
    "region": "us-east-1",
    "endpoint": "http://dynamodb.us-east-1.amazonaws.com"
};

if (typeof Promise === 'undefined') {
    AWS.config.setPromisesDependency(require('bluebird'));
  }

const loadCarDetailsWithImage = async function (pKeyValueModelNo,sKeyValueCarName) {

    AWS.config.update(awsConfig);

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

    console.log(pKeyValueModelNo);
    console.log(sKeyValueCarName);

    var params = {
        TableName: "ImageDetails",

        ProjectionExpression:"ModelNo,CarName,ImageUrl",
        KeyConditionExpression: "ModelNo = :mdNo and CarName = :carName",
        ExpressionAttributeValues: {
            ":mdNo": pKeyValueModelNo,
            ":carName": sKeyValueCarName
        },



    };


    //1.Tried like this as option 1
    //but data is empty
    await docClient.query(params).promise().then(function(data) {
        console.log(JSON.stringify(data, null, 2));
      }).catch(function(err) {
        console.log(JSON.stringify(err, null, 2));
      });




    //2.Tried alternative way as option 2
    //but data is empty
    return new Promise(function(resolve,reject){
        docClient.query(params, function (err, data) {
            if (err) {
                console.log("error - " + JSON.stringify(err, null, 2));
                reject(err);
            }
            else {
                console.log("success - " + JSON.stringify(data, null, 2));
                resolve(JSON.stringify(data, null, 2));
            }
        })

    })

}

module.exports = loadCarDetailsWithImage;

Вызываемая функция, которая вызывается при получении запроса на http-сервере, выглядит следующим образом:

var car = require('./loadCarDetailsWithImage'); // this I have written at beginning

function callBusinessProcess(id,carName,res){
        console.log("id: "+id+" and name: "+carName);
        var initializePromise =   car(id,carName);
        initializePromise.then(function(result) {
            console.log(result);
            res = result;
        },function(err){
            console.log(err);
        }).then(function(result){
            console.log(result);
        })

    }

Выход OutPut выглядит следующим образом:

success - {
  "Items": [],
  "Count": 0,
  "ScannedCount": 0
}
{
  "Items": [],
  "Count": 0,
  "ScannedCount": 0
}

вызывает функцию, подобную

if(req.method.toLowerCase() == 'get'
           && req.url.substring(0,9) == '/content/'){

            var q = url.parse(req.url,true).query;
            console.log("Model No :"+q.model);
            console.log("Car Name :"+q.name);
           callBusinessProcess(q.model,q.name,res);


           }

также имеет значения переменных в выходных данных, как показано ниже. Эти значения доступны в db

Model No :bmwx1
Car Name :BMW
pKeyValueModelNo :bmwx1
sKeyValueCarName :BMW

Я очень смущен тем, что, хотя я использовал обещание в своей функции, я все еще получаю пустой объект

...