整数"/>
如何验证猫鼬数组中的整数
我制作了一个具有属性Loc
的模式places
,该属性是一个字符串数组。我想验证数组的元素。元素不能为空字符串或仅包含空格的字符串。我只想要非空非空白字符串。我正在使用比赛验证器。
所以我尝试了以下代码:
const mongoose = require('mongoose');
const arrSchema = new mongoose.Schema({
value: { type: String, match: /^(?!\s*$).+/ }
})
const Loc = mongoose.model('Loc', {
num: Number,
places: [arrSchema]
});
(async ()=>{
try{
await mongoose.connect.....
let data1 = new Loc({
num: 1,
places: ['a','b','c']
});
// this one should work
console.log('trying save one');
await data1.save();
console.log("data1 saved");
let data2 = new Loc({
num: 2,
places: [' ','p','q']
});
// this one should not
console.log('trying save two');
await data2.save();
console.log('data2 saved');
process.exit(0);
} catch(err){
console.log("Error");
process.exit(1);
}
})();
但是代码试图保存data1
时会引发验证错误。有人可以告诉我我要去哪里了吗?
有两种方法可以做到这一点
[First:您已经创建了将在places Array中使用object {“ value”:“ string”}]的架构,并且在代码中,您直接在为什么它不起作用。
下面是更新的代码
const mongoose = require('mongoose');
const arrSchema = new mongoose.Schema({
value: { type: String, match: /^(?!\s*$).+/ }
})
const Loc = mongoose.model('Loc', {
num: Number,
places: [arrSchema]
});
(async ()=>{
try{
await mongoose.connect.....
let data1 = new Loc({
num: 1,
places: [{"value": "a"},{"value": "b"},{"value": "c"}]
});
// this one should work
console.log('trying save one');
await data1.save();
console.log("data1 saved");
let data2 = new Loc({
num: 2,
places: [{"value": " "},{"value": "p"},{"value": "q"}]
});
// this one should not
console.log('trying save two');
await data2.save();
console.log('data2 saved');
process.exit(0);
} catch(err){
console.log("Error");
process.exit(1);
}
})();
[Second:如果您不希望在[[places Array中使用对象,则应更新Loc Schema并放置一个自定义验证器,如下面的代码所示]]const mongoose = require('mongoose');
var LocSchema = new mongoose.Schema({
num: Number,
places: {
type: [String],
validate: {
validator: function(value) {
for (var i = 0; i < value.length; i++) {
if (!(/^(?!\s*$).+/.test(value[i]))) {
return false;
}
}
return true;
},
message: props => `Location should not be empty`
}
}
});
const Loc = mongoose.model('Loc', LocSchema);
(async ()=>{
try{
await mongoose.connect.....
let data1 = new Loc({
num: 1,
places: ['a','b','c']
});
// this one should work
console.log('trying save one');
await data1.save();
console.log("data1 saved");
let data2 = new Loc({
num: 2,
places: [' ','p','q']
});
// this one should not
console.log('trying save two');
await data2.save();
console.log('data2 saved');
process.exit(0);
} catch(err){
console.log("Error");
process.exit(1);
}
})();
更多推荐
如何验证猫鼬数组中的整数
发布评论