我正在设置一个新服务器,并创建了一个名为“Announcement”的 Mongoose 模型,其中包含一组名为“Image”的子文档。每当我向创建的内容发送超过 1 个子文档时,检查图像的 url
是否符合正则表达式的验证都会失败。有时第二个子文档失败,有时第一个子文档失败。
regex.js
:
export const EMAIL_REGEX = /^(([^<>()\[\]\\.,:\s@"]+(\.[^<>()\[\]\\.,:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
export const FULL_NAME_REGEX = /^[A-Za-zÀ-ÖØ-öø-ÿ]+(([',. -][A-Za-zÀ-ÖØ-öø-ÿ ])?[A-Za-zÀ-ÖØ-öø-ÿ]*)*$/
export const URL_REGEX = /(https?:)?\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_+.~#?&\/=]*)/gi
image.js
:
import mongoose from 'mongoose'
import { URL_REGEX } from '../../../config/regex'
const ImageSchema = new mongoose.Schema({
url: {
type: String,
required: [true, 'Url is required'],
match: [URL_REGEX, 'Invalid url']
},
alt: {
type: String,
required: [true, 'Alt is required']
}
})
export default ImageSchema
announcement.js
:
import mongoose from 'mongoose'
import uniqueValidator from 'mongoose-unique-validator'
import ImageSchema from './image'
import { FULL_NAME_REGEX } from '../../../config/regex'
const AnnouncementSchema = new mongoose.Schema({
author: {
type: String,
required: [true, 'Author is required'],
match: [FULL_NAME_REGEX, 'Invalid name']
},
title: {
type: String,
required: [true, 'Title is required']
},
content: {
type: String,
required: [true, 'Content is required']
},
images: {
type: [ImageSchema],
default: []
},
createdAt: {
required: true,
type: Date
},
updatedAt: {
required: true,
type: Date
}
})
ModelSchema.plugin(uniqueValidator, {
message: '{PATH} ({VALUE}) needs to be unique'
})
AnnouncementSchema.pre('validate', function(next) {
const date = new Date()
if (this.isNew) {
this.createdAt = date
}
this.updatedAt = date
next()
})
export default mongoose.model('announcements', AnnouncementSchema)
如果我尝试使用以下内容创建公告:
new Announcement({
author: "John Doe",
title: "Lorem Ipsum",
content: "Lorem ipsum dolor sit amet",
images: [{
url: "http://google.com/image1.jpg",
alt: "Image description"
}]
}).save()
它按预期工作。
但是如果我尝试使用以下内容创建:
new Announcement({
author: "John Doe",
title: "Lorem Ipsum",
content: "Lorem ipsum dolor sit amet",
images: [{
url: "http://google.com/image1.jpg",
alt: "Image description"
}, {
url: "http://google.com/image2.jpg",
alt: "Image description"
}]
}).save()
我得到:
{
"images.1.url": "Invalid url"
}
有人经历过这种情况吗?
最佳答案
结果是正则表达式,由于某种原因它不能处理多个图像......这很奇怪,因为它们是单独验证的。
新的正则表达式是:
/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/
关于node.js - 发送多个子文档时 Mongoose 验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57298192/