作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基本上,这就是我的想法:
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/
我是一名优秀的程序员,十分优秀!