我正在学习如何使用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”所暗示的那样)。