我正在学习如何使用node.js制作web应用程序。我一直在遵循Alex Young提供的教程。我很难理解pre()函数在Mongoose中是如何工作的。我已经阅读了MongooseAPI文档,并理解它是一种将函数“链接”到现有函数的方法,但是当我看一个代码示例(请参见下面的代码片段)时,我不理解它实际上是如何工作的。
我的问题是这里发生了什么?这里涉及三个函数(usersaved()、usersavefailed()和pre()函数中定义的密码验证函数)。这些函数在运行顺序方面是如何相互关联的?在运行usersaved()和usersavedfail()之前,是否已完成将文档实际保存到数据库中?
我承认,我对javascript的理解不足可能是因为我对javascript的知识不足(我来自php背景),但我无法理解这段代码中的内容。
modified save behavior define in 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”所暗示的那样)。

07-28 09:45