我正在使用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);
});
});
更多信息点击这里