Mongoose - 전자 메일 구문의 유효성 검사
사용자용 몽구스 스키마(UserSchema)가 있는데 이메일의 구문이 올바른지 확인하고 싶습니다.현재 사용하고 있는 유효성 검사는 다음과 같습니다.
UserSchema.path('email').validate(function (email) {
return email.length
}, 'The e-mail field cannot be empty.')
그러나 이것은 필드가 비어 있는지 여부만 확인하고 구문은 확인하지 않습니다.
재사용할 수 있는 것이 이미 존재합니까? 아니면 제 나름의 방법을 생각해내고 유효성 검사 기능 안에서 호출해야 합니까?
스키마에서 유효성 검사를 위해 일치 또는 유효성 검사 속성을 사용할 수도 있습니다.
예
var validateEmail = function(email) {
var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
return re.test(email)
};
var EmailSchema = new Schema({
email: {
type: String,
trim: true,
lowercase: true,
unique: true,
required: 'Email address is required',
validate: [validateEmail, 'Please fill a valid email address'],
match: [/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/, 'Please fill a valid email address']
}
});
저는 입력 위생을 위해 검증기를 사용합니다. 그리고 그것은 꽤 멋진 방식으로 사용될 수 있습니다.
설치한 다음 다음과 같이 사용합니다.
import { isEmail } from 'validator';
// ...
const EmailSchema = new Schema({
email: {
//... other setup
validate: [ isEmail, 'invalid email' ]
}
});
효과가 좋고, 잘 읽습니다.
정규식을 사용할 수 있습니다.이 질문을 보십시오. JavaScript에서 이메일 주소를 확인하시겠습니까?
저는 이것을 과거에 사용했습니다.
UserSchema.path('email').validate(function (email) {
var emailRegex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
return emailRegex.test(email.text); // Assuming email has a text attribute
}, 'The e-mail field cannot be empty.')
확인자가 mongoose를 사용하여 경고 집합을 제거할 수 없음: Async to false
const validator = require('validator');
email:{
type:String,
validate:{
validator: validator.isEmail,
message: '{VALUE} is not a valid email',
isAsync: false
}
}
오래된 솔루션인 것은 알지만, 이 솔루션이 보이지 않기 때문에 다음 사항을 공유하고자 합니다.
const schema = new mongoose.Schema({
email: {
type: String,
trim: true,
lowercase: true,
unique: true,
validate: {
validator: function(v) {
return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(v);
},
message: "Please enter a valid email"
},
required: [true, "Email required"]
}
});
유효성을 검사할 모든 유형에 대해 이 작업을 수행하고 적절한 정규식을 전달할 수 있습니다.유효성을 검사할 유형과 관련 정규식을 검색하면 해결 방법을 쉽게 찾을 수 있습니다.이렇게 하면 유효성 검사를 일관되게 유지하고 함수를 중단하는 대신 스키마에 모든 코드를 넣습니다.
웬일인지 그래.
validate: [ isEmail, 'Invalid email.']
와 잘 어울리지 않음validate()
시험
const user = new User({ email: 'invalid' });
try {
const isValid = await user.validate();
} catch(error) {
expect(error.errors.email).to.exist; // ... it never gets to that point.
}
그러나 mongoose 4.x(이전 버전에서도 작동할 수 있음)에는 유닛 테스트와 함께 작동하는 다른 대안 옵션이 있습니다.
단일 검증자:
email: {
type: String,
validate: {
validator: function(value) {
return value === 'correct@example.com';
},
message: 'Invalid email.',
},
},
다중 검증자:
email: {
type: String,
validate: [
{ validator: function(value) { return value === 'handsome@example.com'; }, msg: 'Email is not handsome.' },
{ validator: function(value) { return value === 'awesome@example.com'; }, msg: 'Email is not awesome.' },
],
},
이메일 유효성 확인 방법:
추천합니다.적절한 검증 도구를 구축하는 데 수백 시간을 투자한 전문가들에게 맡겨 주십시오. (여기서도 이미 답변 완료)
npm install --save-dev validator
import { isEmail } from 'validator';
...
validate: { validator: isEmail , message: 'Invalid email.' }
스키마의 전자 메일 유형 - mongoose-type-email
var mongoose = require('mongoose');
require('mongoose-type-email');
var UserSchema = new mongoose.Schema({
email: mongoose.SchemaTypes.Email
});
가능한 참조:
const mongoose = require("mongoose");
const validateEmail = function(email) {
const regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
return regex.test(email);
};
const userSchema = new mongoose.Schema({
email: {
type: String,
required: [true, "Please enter your email"],
validate: [validateEmail, "Please enter a valid email"],
unique: true,
},
module.exports = mongoose.model("User", userSchema);
email: {
type: String,
match: [/^(([^<>()[\]\\.,;:\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,}))$/, `Please fill valid email address`],
validate: {
validator: function() {
return new Promise((res, rej) =>{
User.findOne({email: this.email, _id: {$ne: this._id}})
.then(data => {
if(data) {
res(false)
} else {
res(true)
}
})
.catch(err => {
res(false)
})
})
}, message: 'Email Already Taken'
}
}
호출된 npm 패키지 사용
validator
이메일뿐만 아니라 많은 검증을 즉시 제공할 수 있습니다.사용하다
validate
두 개의 중첩된 속성을 사용하는 전자 메일 필드의 스키마에 있는 속성 -validator (Function)
그리고 amessage
Validator 기능은 첫 단계에서 설치한 npm 패키지를 사용하는 기능입니다.
코드
npm install validator
스키마 정의
const mongoose = require('mongoose')
const validatorPackage = require('validator')
const UserSchema = new mongoose.Schema({
.......
email: {
type: String,
unique: true,
required: [true, 'Email address is required'],
validate: {
validator: validatorPackage.isEmail,
message: 'Please provide a valid email',
},
},
.......
})
const model = mongoose.model('User', UserSchema)
module.exports = model
언급URL : https://stackoverflow.com/questions/18022365/mongoose-validate-email-syntax
'programing' 카테고리의 다른 글
Documents 폴더에 파일이 있는지 확인하는 방법은 무엇입니까? (0) | 2023.05.23 |
---|---|
Excel 테이블에서 SQL 쿼리를 실행하는 방법은 무엇입니까? (0) | 2023.05.23 |
npm을 사용하여 앱의 종속성을 어떻게 다시 설치합니까? (0) | 2023.05.23 |
앱스토어에서 애플리케이션에 대한 올바른 'aps-environment' 자격 문자열을 찾을 수 없습니다. (0) | 2023.05.23 |
UI 탐색 모음에 단추를 추가하는 방법은 무엇입니까? (0) | 2023.05.23 |