Я 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
Я очень смущен тем, что, хотя я использовал обещание в своей функции, я все еще получаю пустой объект