NodeJS Express分页与Google Datastore如何将游标查询与UI控件集成在一起

我坚持实施分页,我只是需要一些帮助,无论是一些示例代码,甚至只是一个提示,以帮助我在正确的方向前进。

我正在寻找关于如何将Google Datastore数据库游标与前端UI分页控件集成的指导。 我知道如何构build一个angular度分页服务,但这是一次检索所有数据,由于性能问题(5,000条logging+)我想使用游标来检索子集中的数据。

注:这里有一个类似的问题,但我需要更多的细节比这个接受的答案提供。 Google数据存储中的节点分页

问题:如何将分页的数据存储区游标查询与前端UI控件集成以允许用户select当前页面并控制每个页面上显示的结果数量?

我需要build立一个页面,显示大量的dynamic分页logging。 用户必须能够select每个页面上显示的logging数量。

由于一次可能会返回几千条logging,我想使用游标来检索数据的子集。

有一个如何在文档分页的例子,但它是一个非常基本的例子,并没有演示如何与前端UI控件集成。

任何人都可以提供一个更详细的例子和/或指向我在正确的方向从哪里开始这个要求? 不幸的是我一直没能在网上find任何详细的例子。

https://googlecloudplatform.github.io/google-cloud-node/#/docs/datastore/1.1.0/datastore

分页logging

var express = require('express'); var app = express(); var NUM_RESULTS_PER_PAGE = 15; app.get('/contacts', function(req, res) { var query = datastore.createQuery('Contacts') .limit(NUM_RESULTS_PER_PAGE); if (req.query.nextPageCursor) { query.start(req.query.nextPageCursor); } datastore.runQuery(query, function(err, entities, info) { if (err) { // Error handling omitted. return; } // Respond to the front end with the contacts and the cursoring token // from the query we just ran. var frontEndResponse = { contacts: entities }; // Check if more results may exist. if (info.moreResults !== datastore.NO_MORE_RESULTS) { frontEndResponse.nextPageCursor = info.endCursor; } res.render('contacts', frontEndResponse); }); }); 

要记住的一件事是游标列表限制的第一项:

  • 游标只能由执行原始查询的相同项目使用,并且只能用于继续相同的查询。 无法设置与最初生成的查询相同的查询,而无法使用游标检索结果。

因此,您需要始终能够在处理程序中重新创build原始查询,这意味着您需要将NUM_RESULTS_PER_PAGE值从一个请求传递到另一个请求。 每次更改值时都需要重置查询 – 这意味着在更改每页显示的结果数后,您无法继续浏览您所在的位置。

然后,为了能够使用分页,还需要将当前游标值从一个请求传递到另一个请求,并在每个请求时更新。

现在我不是一个NodeJS用户,所以我可以确切地说明这个传递值是如何从一个请求传递到另一个请求的。 在你的代码req.query.nextPageCursorfrontEndResponse.nextPageCursor似乎是为此目的,但我不能告诉如果这是好的或不。 也许这是一个不太具体的问题,更容易find答案。

例如,在python webapp2中,我可以将服务器端的这些值存储在用户会话中的一个请求中,并在随后的请求中从会话中读取它们。 不知道这是否有帮助。