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上)构建一个即时消息系统
- 我只想将记录传播到正确(修改并)插入数据库表的客户端
#!/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] 您是如何安装数据库搜索提供程序的?