繁体   English   中英

无法理解Mongoose中的pre()函数如何在此代码段中工作

[英]Having trouble understanding how the pre() function in Mongoose is working in this code snippet

我正在学习如何使用node.js制作网络应用程序。 我一直在关注Alex Young提供的教程。 我无法理解pre()函数在Mongoose中的工作原理。 我已经阅读了Mongoose API文档,并了解它是一种将现有函数“链接”的方式,但是当我查看代码示例时,我不明白它是如何工作的(参见下面的代码片段)。

我的问题是这里发生了什么? 这里涉及三个函数(userSaved(),userSaveFailed()和pre()函数中定义的密码验证函数)。 这些功能在运行顺序方面如何相互关联? 在运行userSaved()和userSavedFail()之前,是否已将文档实际保存到数据库中?

我承认我缺乏理解的理解可能是由于我对javascript缺乏了解(我来自PHP背景),但我无法理解这段代码中发生的事情。

修改后的保存行为在models.js中定义:

 User.pre('save', function(next) {
   if (!validatePresenceOf(this.password)) {
   // Through error if password fails validation.
   next(new Error('Invalid password'));
   }
   else {
     next();
   }
 });

调用从app.js将数据保存到数据库:

app.post('/users.:format?', function(req, res) {
    var user = new User(req.body.user);

    function userSaved() {
      switch (req.params.format) {
        case 'json':
          res.send(user.__doc);
          break;

        default:
          req.session.user_id = user.id;
          res.redirect('/documents');
      }
    }

    function userSaveFailed() {
      res.render('users/new.jade', {
        locals: { user: user }
      });
  }

  user.save(userSaved, userSaveFailed);
});

在我看来,“save”之后的函数是在调用save函数之前执行的方法(如函数名“PRE”所示)。

运行的第一个函数是user.save()传入两个回调,一个用于if;如果user.save()完成没有错误(userSaved),另一个如果失败(userSavedFailed)

 User.pre('save', function(next) {
  if (!validatePresenceOf(this.password)) {
    // Through error if password fails validation.
    next(new Error('Invalid password'));
  }
  else {
    next();
  }
 });

此代码并行运行一组异步函数,仅在所有函数完成后返回响应。 在这种情况下,它通过调用回调函数(userSaved或UserSavedFailed)返回。 调用哪个取决于在任何函数的处理过程中是否存在错误。

异步模块还链接功能并允许它们同步或并行运行,并可提供一些示例,说明如何完成此操作以帮助您更好地了解实际发生的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM