Javascript 使用Deepstream(在节点JS上)实时更新新的数据库表条目

Javascript 使用Deepstream(在节点JS上)实时更新新的数据库表条目,javascript,node.js,rethinkdb,instant-messaging,deepstream.io,Javascript,Node.js,Rethinkdb,Instant Messaging,Deepstream.io,免责声明:这可能是一个非常无聊和多余的问题,但我花了一天时间在网上搜索,找不到一个答案…… 我想做什么: 我正在用RejectDB和deepstream.io(在node.js上)构建一个即时消息系统 我只想将记录传播到正确(修改并)插入数据库表的客户端 我已经设置的内容:我设置了RejectionDB,并使用RejectionDB存储连接器和RejectionDB搜索提供程序在node.js上安装了deepstream。在我的Deepstream客户端创建的记录会正确写入我的数据库 服务器

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

我想做什么:

  • 我正在用RejectDB和deepstream.io(在node.js上)构建一个即时消息系统
  • 我只想将记录传播到正确(修改并)插入数据库表的客户端
我已经设置的内容:我设置了RejectionDB,并使用RejectionDB存储连接器和RejectionDB搜索提供程序在node.js上安装了deepstream。在我的Deepstream客户端创建的记录会正确写入我的数据库

服务器端: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:我认为这只可能通过重新思考数据库搜索提供程序实现。如果我错了,请纠正我

假设B:我查看了这个网站: 据我所知,它不断地从RejectionDB表中给我实时搜索结果,我可以说“查找最新的10条消息”。请再说一遍,如果我错了,请纠正我

假设C:假设B中的教程告诉我,我以列表对象的形式获得了10条最新消息。现在我在这里读到:每当添加新条目时,列表对象都会发出事件。(条目添加了事件)。这是正确的吗

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

var queryString = JSON.stringify({
  table: 'book',
  query: [
    ['title', 'match', '^Harry Potter.*'],
    ['price', 'lt', 15.30]
  ]
})
client.record.getList('search?' + queryString)
问题A:我想不出正确的查询字符串应该是什么样子,才能将最近10条消息的列表持续保存在数据库表中

问题B:然后我想监听列表的entry added事件,以将新条目/消息写入客户端的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>

...
//连接到deepstream服务器
var ds=deepstream(“192.168.192.201:6020”).login();
//为新记录创建唯一的名称
var name=“messagethread\uu a\u b/”+ds.getUid();
//实例化一个新记录
var record=ds.record.getRecord(名称);
//设置新记录的若干属性
记录集({
信息:“测试123”,
from:“ClientA”//这是index2.html中的ClientB
});
//订阅表上的更改
var queryString=JSON.stringify({
表:“messagethread\uuu a\u b”,
查询:[
['title','match','^Harry Potter.*'],
[price','lt',15.30]
]
})
record.getList('search?'+queryString);

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

RejectionDB搜索提供程序允许“智能”查询,而这在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)
DB sdk需要“限制”和“订单”

问题B的解决方案 电话

client.record.getList 
实际上返回一个[1],然后可以使用它订阅不同的事件

您需要做的只是:

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

[1]

您是如何安装数据库搜索提供程序的?