【发布时间】:2019-09-08 21:49:00
【问题描述】:
我有这个服务器端验证方法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"
因此,我无法指示客户端是哪种类型的错误,或者必须更改哪个字段才能使方法正确运行。
有没有办法捕获服务器方法上的验证错误并将它们发送到客户端?
感谢您的建议!
【问题讨论】: