使用 simpl-schema 时字段 XXX 中的未知键
Unknown key in field XXX when using simpl-schema
我在我的项目中只使用 aldeed:simple-schema
包 check
和 audit-argument-checks
。
使用我的 SimpleSchema 的检查功能工作正常。
但后来我想使用 collection2。
Collection2 需要 npm 包 simpl-schema
。
当我安装 aldeed:collection2
和 npm 包 simpl-schema
时,我使用 SimpleSchema 的检查停止工作,现在显示以下错误:
Error: Match error: Unknown key in field title
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.)
如何同时使用 check
、audit-argument-checks
、simple-schema
和 collection2
这四个软件包?
感谢您的回答
您不能在 Meteor 的 check
实用程序中使用 NoteUpsertSchema
。
check
、audit-argument-checks
、simpl-schema
和 collection2
在同步时效果很好,相互兼容性没有这样的问题。 Check
只允许定义参数,您可以根据这些参数交叉检查有效性。
Click here 了解 check
允许类型的详细信息。
考虑到audit-argument-checks
,您需要使用下面示例所示的方法来检查 Meteor Method 中传递的参数。为避免在使用 SimpleSchema 验证 Meteor 方法参数时未检查所有参数的错误,您必须在创建 SimpleSchema 实例时将检查作为选项传递。
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
文件中列出。
另外,问题可能是从客户端发送了一个完整的对象,并且只在 meteor 方法中验证了它的一些字段。确保发送到该方法的参数仅包含正在验证的内容,并且没有来自客户端代码的额外字段。
我在我的项目中只使用 aldeed:simple-schema
包 check
和 audit-argument-checks
。
使用我的 SimpleSchema 的检查功能工作正常。
但后来我想使用 collection2。
Collection2 需要 npm 包 simpl-schema
。
当我安装 aldeed:collection2
和 npm 包 simpl-schema
时,我使用 SimpleSchema 的检查停止工作,现在显示以下错误:
Error: Match error: Unknown key in field title
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.)
如何同时使用 check
、audit-argument-checks
、simple-schema
和 collection2
这四个软件包?
感谢您的回答
您不能在 Meteor 的 check
实用程序中使用 NoteUpsertSchema
。
check
、audit-argument-checks
、simpl-schema
和 collection2
在同步时效果很好,相互兼容性没有这样的问题。 Check
只允许定义参数,您可以根据这些参数交叉检查有效性。
Click here 了解 check
允许类型的详细信息。
考虑到audit-argument-checks
,您需要使用下面示例所示的方法来检查 Meteor Method 中传递的参数。为避免在使用 SimpleSchema 验证 Meteor 方法参数时未检查所有参数的错误,您必须在创建 SimpleSchema 实例时将检查作为选项传递。
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
文件中列出。
另外,问题可能是从客户端发送了一个完整的对象,并且只在 meteor 方法中验证了它的一些字段。确保发送到该方法的参数仅包含正在验证的内容,并且没有来自客户端代码的额外字段。