我有一个基本的猫鼬模式:
var userSchema = new Schema({
userName: {type: String, required: 'Please enter a username'},
email: {type: String, required: 'Please enter email'},
password: {type: String, required: 'Please create a password'},
created: {type: Date, default: Date.now}
});
我执行一个自定义验证器,调用一个小服务(在另一个文件中)来查找电子邮件地址是否已被使用:
userSchema.path('email').validate(function(value, next) {
userService.findUser(value, function(err, user) {
if (err) {
console.log(err);
return next(false);
}
next(!user);
});
}, 'Already exists');
这是findUser方法:
exports.findUser = function(email, next) {
User.findOne({email: email.toLowerCase()}, function(err, user) {
next(err, user);
});
};
我的问题是:如果我想使用像validator这样的模块来验证输入是否是电子邮件,我将如何进行此操作?我知道我可以要求模块并执行类似validator.isEmail(email)
的操作并获得布尔值作为回报,但是如何将其与我当前的设置集成?
答案 0 :(得分:2)
最简单的方法就是在Log.Logger = new LoggerConfiguration()
.WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\app-{Date}.log")
.WriteTo.ColoredConsole()
.MinimumLevel.Debug()
.CreateLogger();
HostFactory.Run(x => {
// configure TopShelf to use Serilog's global instance.
x.UseSerilog();
}
方法中检查它。如果电子邮件无效,它将返回验证错误。
validate
此处有一些建议使用var validator = require('validator');
// Validate email address
userSchema
.path('email')
.validate(function (value) {
return validator.isEmail(value);
}, 'Email is invalid');
检查电子邮件的唯一性:
constructor
答案 1 :(得分:0)
最简单的方法是在架构中使用RegEx来验证它是否是有效的电子邮件。然后使用UserSchema.pre('save' function...)
验证电子邮件是否已被使用。这将作为在注册方法中调用的中间件。
var userSchema = new Schema({
userName: {type: String, required: 'Please enter a username'},
email: {type: String, required: 'Please enter email'},
password: {
type: String,
match: [/.+\@.+\..+/, "Please fill a valid email address"],
required: 'Please create a password'},
created: {type: Date, default: Date.now}
});