javascript - Meteor:插入时过滤属性不起作用

标签 javascript collections meteor

我想过滤来自客户端但在创建新文档时不需要的属性。我尝试使用下划线的 _.pick() 但似乎我无法覆盖doc

Meteor.Collection.prototype.addTimestamps = function () {

  this.deny({
    insert: function(userId, doc) {
      doc.createdAt = Date.now();
      doc.updatedAt = Date.now();
      return false;
    },
    update: function(userId, doc, fieldNames, modifier) {
      modifier.$set.updatedAt = Date.now();
      return false;
    },
  });

};


Entries.addTimestamps();
Entries.allowed = ['_id', 'content', 'createdAt', 'updatedAt'];

Entries.allow({
  insert: function (userId, doc) {
    doc = _(doc).pick(Entries.allowed);
    doc.userId = userId;
    return !! userId;
  },

  update: function (userId, doc, fieldNames, modifier) {
    return doc.userId === userId;
  },

  remove: function (userId, doc) {
    return doc.userId === userId;
  }
});

最佳答案

通过写入行中的doc

doc = _(doc).pick(Entries.allowed);

您将覆盖 doc 变量,以便它不再指向实际的 doc 对象。您想要的是更改对象本身。

您需要删除所有未列入白名单的doc属性。实现示例:

insert: function(userId, doc) {
  var keys = _.keys(doc);
  keys = _.difference(keys, Entries.allowed);
  _.each(keys, function(key) {
    delete doc[key];
  });
}

关于javascript - Meteor:插入时过滤属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23395189/

相关文章:

javascript - 在 Quilljs 错误 : addRange(): The given range isn't in document 中将文本动态包装在 anchor 标记中

javascript - 如何检查是否在 Facebook Canvas 内

javascript - 使变量名成为动态变量

javascript - meteor 发布订阅不是被动的

javascript - 在 Meteor.js 中为不同用户提供不同版本的网站

javascript - 如何从一系列捐赠中返回每个独特捐赠类别的总计?

javascript - 使用 react-router 时出现 React 错误 "Uncaught Invariant Violation"

c# - C#中的列表是否有类似于Addrange()的AddUnique方法

c# - C# 中是否有非唯一键排序列表泛型集合?

java - 合并两个 Long 类型的列表并添加到 java 8 中的现有 map