【问题标题】:Meteor Method to send a public MongoDB document without publishing everythingMeteor 方法发送公共 MongoDB 文档而不发布所有内容
【发布时间】:2015-12-11 23:40:40
【问题描述】:

meteor 和 mongo 的新手。

我有一些 JSON 存储在 mongo 中,我想通过混淆令牌公开公开,而不使用类似的东西:

//app/models/stuff.js
Stuff = new Mongo.Collection("stuff");
Meteor.publish("stuff", function (){
    return Stuff.find();
});
//additionally, the client-side subscription

我只想公开客户端通过 URL 路由参数或某种客户端标识符(例如您可以在其中键入代码/令牌的文本字段)直接请求的文件

例如,http://website.com/view/abcdefghijklmnop

任何知道该链接的人都可以输入该链接并获取该文件。但是,应该没有办法只获取 每个 文件而不给出每个令牌。

我想知道这是否是完成任务的最佳方式:

//app/server/stuff.js
Meteor.methods({
    getStuff: getStuff
});

function getStuff(stuffId) {
    var result = Stuff.find({_id: stuffId});
    return result;
}

然后

//app/client/stuff.js
var json = Meteor.call('getStuff', 'abcdefghijklmnop');

【问题讨论】:

  • 听起来使用服务器端路由可能会更好。然后,您可以避免方法调用,甚至可以从非浏览器(例如 wget 或 curl)使用 url。
  • 看来CollectionFS 可能适合这里。
  • hrm,我实际上不想提供文件,我只想为客户端提供一些 json。我会更新帖子。

标签: mongodb meteor angular-meteor


【解决方案1】:

为什么不直接发布请求的文档?

Meteor.publish('stuff', function (id){
  check(id, String);
  return Stuff.find(id);
});

【讨论】:

  • 这是我最初的想法,我想我不明白这是可能的。我看到的唯一示例是使用 UserID 的发布选择器,这对我不利。我想我对 Meteor.subscription 文档(它清楚地详细说明了如何提供论点)感到震惊,并且只是阅读了发布方面的文档。我认为这是显而易见的方法。
  • 是的,您可以将方法和发布函数视为授权看门人。他们可以执行任意复杂的检查并返回适当的过滤结果。
猜你喜欢
  • 2016-04-13
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多