Javascript DynamoDB查询在node.js中从http服务器调用时返回空对象
我是node.js learner。我已经编写了一个本地文件,该文件将从本地m/c连接到dynamo db服务并执行查询。我已经导出了执行查询的函数。 现在,我在node.js中创建了一个http本地服务器,并调用了导出的函数,该函数将调用dynamo db查询。 我在查询dynamo db时使用了promise,但得到的是空对象。 当我执行dynamodb查询函数时,standalone意味着只从同一个文件调用该函数 它按预期返回值,但当从http服务器调用函数时,我面临空对象的问题Javascript DynamoDB查询在node.js中从http服务器调用时返回空对象,javascript,node.js,amazon-dynamodb,aws-sdk-nodejs,Javascript,Node.js,Amazon Dynamodb,Aws Sdk Nodejs,我是node.js learner。我已经编写了一个本地文件,该文件将从本地m/c连接到dynamo db服务并执行查询。我已经导出了执行查询的函数。 现在,我在node.js中创建了一个http本地服务器,并调用了导出的函数,该函数将调用dynamo db查询。 我在查询dynamo db时使用了promise,但得到的是空对象。 当我执行dynamodb查询函数时,standalone意味着只从同一个文件调用该函数 它按预期返回值,但当从http服务器调用函数时,我面临空对象的问题 var
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);
})
}
产出如下:
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
我很困惑,虽然我在函数中使用了promise,但我仍然接收到空对象您是否可以演示如何调用
callBusinessProcess(id,carName,res){
并确保您获得id和carNameif的值(req.method.toLowerCase()='get'&&req.url.substring(0,9)='/content/){var q=url.parse(req.url,true).query;console.log(“模型号:”+q.Model);console.log(“汽车名:”+q.Name);callBusinessProcess(q.Model,q.Name,res);}。我在我的请求中获取值..我从url获取的打印属性输出型号:bmwx1车名:BMW pKeyValueModelNo:bmwx1 sKeyValueCarName:BMW用户::fetchOneByKey::success-{“Items”:[],“Count”:0,“ScannedCount”:0}你能在你的问题中添加这个信息吗?因为从这里很难阅读。当你用pKeyValueModelNo:bmwx1 sKeyValueCarName:BMW直接调用LoadCardTailswithImage时,修改了我实际QS中的信息。它会给出响应吗?