如何过滤DynamoDB的结果?(NodeJS/Lambda)



我正在使用NodeJS和DynamoDB在AWS Lambda中制作API,并试图获取来自科罗拉多州(州=科罗拉多州(的特定客户的详细信息。

在这里,我试图吸引所有来自科罗拉多州的客户。

router.get("/customers", (req, res) => {
const params = {
TableName: 'Customer',
FilterExpression: "stateOrProvince = :state",
ExpressionAttributeValues: {
":state": "Colorado"
}
};
dynamoDb.query(params, (error, result) => {
if (error) {
res.status(400).json({ error: `Error fetching the ${tableName}` });
}
res.json(result.Items);
});
});

在这里,我试图从一个特定的客户获得详细信息

router.get("/customers/:customerId", (req, res) => {
const id = req.params.customerId
const params = {
TableName: 'Customer',
FilterExpression: "customerId = :custId",
ExpressionAttributeValues: {
":custId": id
}
};
dynamoDb.query(params, (error, result) => {
if (error) {
res.status(400).json({ error: `Error fetching the ${tableName}` });
}
res.json(result.Items);
});
});

在这两种情况下,我都收到了邮递员的502错误:|

{"消息":"内部服务器错误";}

你能帮我弄清楚问题出在哪里吗?我已经阅读并尝试了不同的语法,但我还不能让它发挥作用感谢

如果不使用尚未定义的KeyConditionExpression,则无法使用Query操作。您必须至少插入Query的分区密钥。

试试下面的,它使用扫描代替:

router.get("/customers", (req, res) => {
const params = {
TableName: 'Customer',
FilterExpression: "stateOrProvince = :state",
ExpressionAttributeValues: {
":state": "Colorado"
}
};
dynamoDb.scan(params, (error, result) => {
if (error) {
res.status(400).json({ error: `Error fetching the ${tableName}` });
}
res.json(result.Items);
});
});

或者对于特定客户,设置KeyConditionExpression:

router.get("/customers/:customerId", (req, res) => {
const id = req.params.customerId
const params = {
TableName: 'Customer',
KeyConditionExpression: "customerId = :custId",
ExpressionAttributeValues: {
":custId": id
}
};
dynamoDb.query(params, (error, result) => {
if (error) {
res.status(400).json({ error: `Error fetching the ${tableName}` });
}
res.json(result.Items);
});
});

更多信息点击这里

最新更新