Я учусь создавать веб-приложения с помощью node.js. Я следую учебному пособию, предоставленному Alex Young . У меня возникают проблемы с пониманием того, как функция pre () работает в Mongoose. Я прочитал документацию по API Mongoose и понимаю, что это способ «связать» функции с существующей, но я не понимаю, как это работает на самом деле, когда я смотрю на пример кода (см. Фрагменты кода ниже).
Мой вопрос: что здесь происходит? Здесь задействованы три функции (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);
});