meteor - Meteor 服务器验证方法不会在客户端显示验证错误
问题描述
我有这个服务器端验证的方法imports/api/Shops/server/methods.js:
export const shopGeocodeAddress = new ValidatedMethod({
name: 'shops.geocodeAddress',
validate: new SimpleSchema({
streetName: { type: String },
houseNumber: { type: Number },
city: { type: String },
state: { type: String },
country: { type: String },
zip: { type: String, optional: true },
}).validator(),
run({ streetName, houseNumber, city, state, country, zip }) {
...
...
...
...
return location;
},
});
为了测试客户端上的验证错误消息,我将houseNumber作为字符串发送,这将使方法失败,因为它期望houseNumber作为 Number。到目前为止,一切都很好。我在服务器控制台上收到一个验证错误,如下所示:
I20190418-10:55:28.605(-3)? Exception while invoking method 'shops.geocodeAddress' { ClientError: House number must be of type Number
...
...
I20190418-10:55:28.608(-3)? errorType: 'ClientError',
I20190418-10:55:28.608(-3)? name: 'ClientError',
I20190418-10:55:28.608(-3)? error: 'validation-error',
I20190418-10:55:28.609(-3)? details:
I20190418-10:55:28.609(-3)? [ { name: 'houseNumber',
I20190418-10:55:28.609(-3)? value: NaN,
I20190418-10:55:28.609(-3)? type: 'expectedType',
I20190418-10:55:28.609(-3)? dataType: 'Number',
I20190418-10:55:28.609(-3)? message: 'House number debe ser del tipo Number' } ] }
但是在客户端上,我只收到这样的内部服务器错误:
details: undefined
error: 500
errorType: "Meteor.Error"
isClientSafe: true
message: "Internal server error [500]"
reason: "Internal server error"
因此,我无法指示客户端是哪种类型的错误,或者必须更改哪个字段才能使方法正确运行。
有没有办法在服务器方法上捕获验证错误并将它们发送到客户端?
谢谢指教!
解决方案
两件事:A)你可以写
city: String,
state: String,
zip: { type: String, optional: true }
...
B)你说“服务器端验证方法”。您的方法需要位于服务器和客户端都可以访问的公共空间中。在该方法中,您将所有内容都包含在 Server 中。您从客户端调用该方法(并到达它)但在服务器上运行它:
export const shopGeocodeAddress = new ValidatedMethod({
name: 'shops.geocodeAddress',
validate: new SimpleSchema({
streetName: String,
houseNumber: Number,
city: String,
state: String,
country: String,
zip: { type: String, optional: true },
}).validator(),
run({ streetName, houseNumber, city, state, country, zip }) {
if (Meteor.isServer) {
...
...
...
...
return location;
}
},
});
推荐阅读
- erlang - Erlang 解析占位符变量
- android - 授予权限后打开位置设置意图。
- angularjs - 如何将枚举分配给变量?
- java - 将 Javafx Webview 放入容器中(此处为拆分窗格)
- python - 从第 k 个最后一个元素到第 k 个第一个元素的 numpy 索引
- python - Python:迭代地添加列表的相同元素
- java - 嗨,我正面临跨浏览器测试的问题。我没有同时启动两个浏览器
- python - Python:如何编写在不同环境中表现不同的脚本
- javascript - 可调整大小的 Vue-good-table 或 Vue
- node.js - getSignedUrl 通过 aws-sdk 为 putObject 生成的签名不匹配?