0

免责声明:这可能是一个非常无聊和多余的问题,但我花了一天时间在网上搜索并找不到一个答案......

我正在尝试做的事情:

  • 我正在使用 RethinkDB 和 deepstream.io(在 node.js 上)构建即时消息系统
  • 我只想将记录传播到正确(修改并)插入到 RethinkDB 表中的客户端

我已经设置的内容:我设置了 RethinkDB 并使用 rethinkdb 存储连接器和 rethinkdb 搜索提供程序在 node.js 上安装了 deepstream。在我的 Deepstream 客户端创建的记录会正确写入我的 RethinkDB。

服务器端:index.js

#!/usr/bin/env nodejs
var DSServer = require("deepstream.io");
var DSRethinkConnector = require("deepstream.io-storage-rethinkdb");

// Setup the deepstream server

    var server = new DSServer();
    server.set("host", "0.0.0.0");
    server.set("port", 6020);

    // Setup the RethinkDB storage connector
    server.set("storage", new DSRethinkConnector({
        port: 28015,
        host: "localhost",
        splitChar: "/",
        defaultTable: "chat"
    }));

    // Run the server
    server.start();

假设 A:我认为这只有使用 rethinkdb 搜索提供程序才能实现。请纠正我,如果我错了。

假设 B:我查看了这个站点: https : //deepstream.io/tutorials/integrations/db-rethinkdb/,据我了解,它不断地从我的 RethinkDB 表中为我提供实时搜索结果,我可以说“查找最新的 10 条消息”。请再次,如果我错了,请纠正我。

假设 C:假设 B 中的教程告诉我,我以列表对象的形式获得了 10 条最新消息。现在我在这里读到: https://deepstream.io/docs/client-js/datasync-list/每次添加新条目时,列表对象都会发出事件。(条目添加事件)。这个对吗?

计划:我想使用前面提到的教程中示例客户端代码的这一部分来连续检索 10 条最新消息:

var queryString = JSON.stringify({
  table: 'book',
  query: [
    ['title', 'match', '^Harry Potter.*'],
    ['price', 'lt', 15.30]
  ]
})
client.record.getList('search?' + queryString)

问题 A:我无法弄清楚正确的 queryString 应该是什么样子才能在 rethinkdb 表上连续保留最新 10 条消息的列表?

问题 B:然后我想监听列表的添加条目事件,以将新条目/消息写入客户端的 dom。但是我找不到一个示例/资源来解释我将如何去做?

这是我当前的客户端代码:index.html

<html>
<head>
  <script src="deepstream.io-client-js/dist/deepstream.min.js"></script>
</head>
<body>
...
<script>
  // Connect to the deepstream server
  var ds = deepstream("192.168.192.201:6020").login();

  // Create a unique name for the new record
  var name = "messagethread__a_b/" + ds.getUid();

  // Instantiate a new record
  var record = ds.record.getRecord(name);

  // Set several properties of the new record
  record.set({
    message: "Test 123",
    from: "ClientA" //this says ClientB in index2.html 
  });



    // Subscribe to changes on the table
     var queryString = JSON.stringify({
  table: 'messagethread__a_b',
  query: [
    ['title', 'match', '^Harry Potter.*'],
    ['price', 'lt', 15.30]
         ]
       })
      record.getList('search?' + queryString);
</script>
</body>
</html>
4

1 回答 1

0

假设 A、B 和 C 都是正确的。正如您所描述的那样简单,您的代码片段中只缺少一些东西。

rethinkdb 搜索提供程序允许“智能”查询,这些查询在 deepstream 本身中尚不可用。

问题A的解决方案

添加条目数量限制很简单,您只需要在查询中提供几个额外的字段。

var queryString = JSON.stringify({
  table: 'book',
  query: [
    ['title', 'match', '^Harry Potter.*'],
    ['price', 'lt', 15.30]
  ],
  order: 'price',
  desc: true,
  limit: 10

})
client.record.getList('search?' + queryString)

rethinkdb sdk 需要“limit”和“order”。

问题 B 的解决方案

通话

client.record.getList 

实际上返回一个deepstream List 对象[1],然后您可以使用它来订阅不同的事件。

您需要做的就是:

const list = client.record.getList('search?' + queryString)
list.on('entry-added', (entryName, index) => {
  // do stuff here
})

[1] https://deepstream.io/docs/client-js/datasync-list/

于 2017-05-31T14:00:43.790 回答