使用简单模式时字段XXX中的未知密钥

时间:2018-05-18 06:40:06

标签: meteor simple-schema

我在项目中仅使用aldeed:simple-schemacheckaudit-argument-checks使用我的SimpleSchema的检查功能正常

但后来我想使用collection2。 Collection2需要npm包simpl-schema。 当我安装aldeed:collection2和npm包simpl-schema时,我使用SimpleSchema的检查停止工作,现在显示以下错误:

  

错误:匹配错误:字段标题中的未知密钥

Check()正在使用aldeed:simple-schema,但没有使用npm包simpl-schema

import SimpleSchema from 'simpl-schema';

NoteUpsertSchema = new SimpleSchema({
  title: {
    type: String,
    max: 50
  },
  description: {
    type: String,
    max: 500
  }
});

我的流星方法

updateNote(noteId, note){
    check(noteId, String);
    check(note, NoteUpsertSchema);
    // some code
}

我的包的版本:

// Meteor packages
aldeed:collection2         3.0.0  
audit-argument-checks      1.0.7 
check                      1.3.0* 

// Npm package
"simpl-schema": "^1.5.0"
(I tried with simpl-schema: 1.4.3 same result.)

我如何一起使用四个包checkaudit-argument-checkssimple-schemacollection2

感谢您的回答

1 个答案:

答案 0 :(得分:1)

您无法在Meteor中的NoteUpsertSchema实用程序中使用check

checkaudit-argument-checkssimpl-schemacollection2可以很好地同步,互不兼容就没有问题。 Check仅允许您定义参数,您可以根据这些参数交叉检查有效性。 Click here了解check允许类型的详细信息。

考虑audit-argument-checks,您需要使用下面显示的方法来检查Meteor Method中传递的参数。为避免在使用SimpleSchema验证Meteor方法参数时未检查所有参数的错误,必须在创建SimpleSchema实例时将check作为选项传递。

import SimpleSchema from 'simpl-schema';
import { check } from 'meteor/check';
import { Meteor } from 'meteor/meteor';

SimpleSchema.defineValidationErrorTransform(error => {
  const ddpError = new Meteor.Error(error.message);
  ddpError.error = 'validation-error';
  ddpError.details = error.details;
  return ddpError;
});

const myMethodObjArgSchema = new SimpleSchema({ name: String }, { check });

Meteor.methods({
  myMethod(obj) {
    myMethodObjArgSchema.validate(obj);

    // Now do other method stuff knowing that obj satisfies the schema
  },
});

确保aldeed:simple-schema文件中未列出.meteor/versions

此外,问题可能是从客户端发送完整对象,并且仅在流星方法中验证其某些字段。确保发送到方法的参数仅包含正在验证的内容,并且没有来自客户端代码的额外字段。