【发布时间】:2017-02-01 18:16:27
【问题描述】:
我正在使用mongoose v4.8.0,
mongo v3.4.1, node v6.9.1
我有这个架构:
var UserSchema = new Schema({
volAddressCoords: { 'type': {type: String, default: "Point"},
coordinates: { type: [Number],
default: [37.9800927,23.73151580]},
index: {type: String, default: '2dsphere'}}
(...)
})
用户选中一个复选框,提交一个表单,如果它是假的,这就是 req.body:
{ volAddress: null,
volAddressCoords: [],
comRange: null,
isVolunteer: null }
这是false时抛出的错误(所有字段都是空的): (为方便起见,所有错误都被截断)
{ ValidationError: User validation failed
errors:
{ volAddressCoords:
{ CastError: Cast to Object failed for value "[]" at path "volAddressCoords"
message: 'Cast to Object failed for value "[]" at path "volAddressCoords"',
name: 'CastError',
stringValue: '"[]"',
kind: 'Object',
value: [],
path: 'volAddressCoords',
reason: undefined },
'volAddressCoords.type':
{ ValidatorError: `,` is not a valid enum value for path `volAddressCoords.type`.
message: '`,` is not a valid enum value for path `volAddressCoords.type`.',
name: 'ValidatorError',
properties: [Object],
kind: 'enum',
path: 'volAddressCoords.type',
value: [Object] } },
message: 'User validation failed',
name: 'ValidationError' }
为真时的正文:
{ volAddress: '2307 Princes Highway, Heywood, Βικτώρια, Αυστραλία',
volAddressCoords: [ 141.61755859999994, -38.1103413 ],
comRange: 4,
isVolunteer: true }
复选框为真时出错:
{ ValidationError: User validation failed
errors:
{ volAddressCoords:
{ CastError: Cast to Object failed for value "[ 141.61755859999994, -38.1103413 ]" at path "volAddressCoords"
message: 'Cast to Object failed for value "[ 141.61755859999994, -38.1103413 ]" at path "volAddressCoords"',
name: 'CastError',
stringValue: '"[ 141.61755859999994, -38.1103413 ]"',
kind: 'Object',
value: [Object],
path: 'volAddressCoords',
reason: undefined },
'volAddressCoords.type':
{ ValidatorError: `,` is not a valid enum value for path `volAddressCoords.type`.
message: '`,` is not a valid enum value for path `volAddressCoords.type`.',
name: 'ValidatorError',
properties: [Object],
kind: 'enum',
path: 'volAddressCoords.type',
value: [Object] } },
message: 'User validation failed',
name: 'ValidationError' }
我还尝试了另一个 SO 问题 Does applying a 2dsphere index on a mongoose schema force the location field to be required? 中提到的此代码,但发生了同样的错误:
UserSchema.pre('patch', function (next) {
if (this.isNew && Array.isArray(this.volAddressCoords) && 0 === this.volAddressCoords.length) {
this.volAddressCoords = undefined;
}
next();
});
我可以做什么才能工作?
【问题讨论】: