gpt4 book ai didi

javascript - 如何在没有 MongoDB 的情况下通过订阅在 Meteor 中发布数据?

转载 作者:行者123 更新时间:2023-12-04 17:20:22 25 4
gpt4 key购买 nike

基本上,这就是我的想法:

客户端

const Messages = new Mongo.Collection("messages");

Meteor.call("message", { room: "foo", message: "Hello world");
Meteor.subsribe("messages", "foo");

// elsewhere
const messages = Messages.find({ room: "foo" });

服务器

Meteor.methods({
message: ({ room, message }) => {
// 1. remove old messages in the room
// 2. add new message to the room
}
});

Meteor.publish("messages", function (room) {
// 1. return message collection for room
});

我假设客户端使用 minimongo,这没问题,但服务器无权访问 MongoDB 实例。

服务器上的实现是什么?

最佳答案

如评论中所述,我认为这可以使用 the documentation 中描述的手动发布方法来实现.这样的事情可能会起作用:

// Server:

const rooms = {};

Meteor.publish('manualMessages', function(roomId) {
check(roomId, String);
rooms[roomId] = this;
this.ready();
});

Meteor.methods({
message: ({ roomId, message }) => {
// 1. remove old messages in the room
const room = rooms[roomId];
if (!room) {
throw new Meteor.Error('no room', 'that room does not exist');
}
room.removed('messages', roomId);
// 2. add new message to the room
room.added('messages', roomId, { message });
}
});



// Client:
const Messages = new Mongo.Collection("messages");

Meteor.call("message", { room: "foo", message: "Hello world");
Meteor.subsribe("manualMessages", "foo");

// elsewhere
const messages = Messages.find({ room: "foo" });

要验证的一件事是 publish 函数中的 this 是否会根据客户端发生变化,在这种情况下 rooms 应该包含数组,或者它是否对所有客户来说都是同一个对象,就像这里假设的那样。但希望这能为您指明正确的方向。

关于javascript - 如何在没有 MongoDB 的情况下通过订阅在 Meteor 中发布数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66566910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com