Meteor Collection 删除不安全的包后 FS 插入不工作

Meteor Collection FS insert not working after removing insecure packages

正如您从标题中看到的那样,我的 Collection 文件系统在删除不安全的软件包后出现问题。

我正在使用 cfs:gridfs。

正在删除软件包:不安全、自动发布

我的HTML

<template name="image_upload">
    <input class="fileinput btn" type="file" name="file" accept="image/*" {{disableButton}}>
</template>

在我的服务器中publications.js

Meteor.publish("image_upload", function () {
    return Images.find();
});

我的lib/collections.js

Images = new FS.Collection("images", {
    stores: [
    new FS.Store.GridFS("images"),
    ],
    filter: {
        allow: {
            contentTypes: ['image/*']
        }
    }
});
Images.deny({
    insert : function() {return false},
    update : function() {return false},
    remove : function() {return false},
    // insert : function() {return false},
});
Images.allow({
    insert: function() { return true },
    update: function() { return true },
    remove: function() { return true }
});

还有我的图片上传活动

Template.image_upload.events({
    'change .fileinput': function(event, template){
        // console.log('abs');
        var username = Meteor.user().username;
        FS.Utility.eachFile(event, function(file){
            var fsFile = new FS.File(file);
            fsFile.username = username;
            fsFile.tweetkey = Session.get('tweetkey');
            Images.insert(fsFile, function(err) {});
        });
    }
});

我的包裹

# Meteor packages used by this project, one per line.
# Check this file (and the other files in this directory) into your repository.
#
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.

meteor-platform
accounts-ui
accounts-password
msavin:mongol
cfs:standard-packages
cfs:gridfs
iron:router
mizzao:jquery-ui
mizzao:bootstrap-3
fortawesome:fontawesome
reywood:publish-composite
momentjs:moment

如果有人能帮助我,那就太好了!

也尝试为 Images.deny({}) 设置规则。它们将覆盖您的 allow 规则,但据我所知,应首先添加 deny 规则。在他们提到的文档中:

Meteor allows the write only if no deny rules return true and at least one allow rule returns true.

编辑:看到你的控制台没有任何错误后,我认为这只是订阅的问题(删除 autopublish 将强制你订阅对于每条路线)。尝试像这样更改模板和路由器:

client\image_upload.html

<template name="image_upload">
  <input class="fileinput btn" type="file" name="file" accept="image/*" {{disableButton}}>

  {{#each images}}
    <div class="img">
      {{this.original.name}}
    </div>
  {{/each}}
</template>

lib\router.js

Router.route('/', {
  name: 'image_upload',
  action: function () {
    this.render('image_upload');
  },
  data: function () {
    return {
      images: Images.find({})
    };
  },
  waitOn: function () {
    return [
      Meteor.subscribe('image_upload')
    ];
  }
});

以后,尝试查看 https://github.com/meteorhacks/subs-manager 以获得更好的订阅管理器、缓存等。

你有这个:

Meteor.publish("image_upload", function () {
    return Images.find();
});

但 "image_upload" 是您的模板名称,而不是您的 collection 名称。你的 collection 叫做 "images".

在服务器上,您可以定义将哪些数据(collections)发布到客户端。试试这个:

Meteor.publish("images", function () {
    return Images.find();
});