gpt4 book ai didi

javascript - 模式验证函数在 Mongoose 中如何工作?

转载 作者:行者123 更新时间:2023-12-02 15:56:19 24 4
gpt4 key购买 nike

在学习 MEAN 堆栈教程时,我发现自己对以下 Mongoose 验证代码感到困惑。

user-service.js

exports.findUser = function(email, next){
User.findOne({email:email.toLowerCase()}, function(err,user){
next(err, user);
})
};

user.js

var userService = require('../services/user-service');

var userSchema = new Schema({
...
email: {type: String, required: 'Please enter your email'},
...
});

userSchema.path('email')
.validate(function(value,next){
userService.findUser(value, function(err, user){
if(err){
console.log(err);
return next(false);
}
next(!user);
});
}, 'That email is already in use');
  1. 每次以任何方式访问 userSchema 时,userSchema.path('email').validate 会触发并验证电子邮件字符串。此验证也可以在 userSchema 对象中完成,但它会非常困惑。

  2. .validate(function(value, next)... 中,value 是电子邮件字符串,next 是没有给出任何内容并且未定义。(对吗?)

  3. 如果是这样,那么我不知道 return next(false)next(!user) 如何工作。

    <
  4. 我在其他情况下熟悉 next,但是 next 在这里做什么?

最佳答案

其工作原理如下:

userSchema.path('email').validate(function (email, next) {
// look for a user with a given email
// note how I changed `value` to `email`
userService.findUser(email, function (err, user) {
// if there was an error in finding this user
if (err) {
console.log(err)
// call next and pass along false to indicate an error
return next(false)
}
// otherwise, call next with whether or not there is a user
// `user === null` -> then `!user === true`
// `user === { someObject }` -> then `!user === false`
return next(!user)
})
// error message
}, 'That email is already in use')

同意你的观点:

  1. 是的,此函数会验证电子邮件路径。
  2. 是的,value 是电子邮件,因此请使用更好的变量命名并将其命名为 email 而不是 valuenext 就是这样:一个表示“继续下一步”的函数。
  3. 请参阅上面代码中的注释。但是,tldr:如果存在具有该电子邮件的用户,则 !userfalse;如果用户不存在,则 !usertrue。如果 next 传递了 false-y 值,则它认为存在错误。真实值意味着一切都很好。
  4. 它调用“下一步”。例如

    app.get('/admin*', function (req, res, next) {
    req.status = 'I was here!'
    next()
    })

    app.get('/admin/users/view', function (req, res, next) {
    console.log(req.status) // ==> 'I was here!'
    res.render('admin/users/view.jade', { someLocals })
    })

关于javascript - 模式验证函数在 Mongoose 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com