javascript - 无法在 DynamoDB DocumentClient 中实现分页
问题描述
我正在为一个项目使用 React/DynamoDB 堆栈。我正在尝试使用scan
DynamoDB DocumentClient 中的方法进行分页。这是我正在使用的功能:
async function getItems(lastItem?) {
try {
const params = {
TableName: "posts",
Limit: 1,
};
if (lastItem) {
params.ExclusiveStartKey = { item_id: lastItem };
}
const response = await docClient.scan(params).promise();
console.log(response)
return {
items: response.Items,
lastItem: response.LastEvaluatedKey,
};
} catch (error) {
throw error;
}
}
我将此组件用于console.log
此响应:
import { getItems } from "../../atoms/functions/AWS";
function Test() {
return (
<div>
<button onClick={() => getItems()}>get item</button>
</div>
);
}
但是,每次点击我都会得到相同的结果:
Object { Items: (1) […], Count: 1, ScannedCount: 1, LastEvaluatedKey: {…}, … }
"$response": Object { retryCount: 0, redirectCount: 0, maxRetries: 10, … }
Count: 1
Items: Array [ {…} ]
LastEvaluatedKey: Object { postId: "2" }
ScannedCount: 1
我正在使用一个带有 5 个帖子的模拟 DynamoDB 表 - postId: "1"
、postId: "2"
等。
我是否getItems
错误地实现了该功能?如何修改上述代码以对所有帖子进行分页?
编辑:
我根据 Mark B 的建议更新了我的组件:
function Test() {
const [item, setItem] = useState();
useEffect(() => {
getItems().then((resp) => setItem(resp));
}, []);
return (
<div>
<button onClick={() => getItems(item)}>get item</button>
</div>
);
}
并替换return {items: response.Items, lastItem: response.LastEvaluatedKey};
为return response.LastEvaluatedKey;
.
我认为这最终会奏效。但是,我收到以下错误:
Uncaught (in promise) ValidationException: The provided starting key is invalid: The provided key element does not match the schema