Как использовать middleware в Mongoose?

Пользователь

от francis_schuster , в категории: JavaScript , 2 года назад

Как использовать middleware в Mongoose?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от maya , 2 года назад

@francis_schuster 

Middleware в Mongoose - это функции, которые выполняются перед или после определенных событий в жизненном цикле документа. Они позволяют модифицировать данные перед сохранением в базу данных, выполнить определенные действия при удалении документа, проверить правильность введенных данных и т.д.


В Mongoose есть два типа middleware: пред-событийный и пост-событийный. Пред-событийный middleware выполняется перед событием (например, "save" или "validate"), а пост-событийный middleware выполняется после события.


Чтобы использовать middleware в Mongoose, необходимо определить его в схеме модели. Например, чтобы создать middleware, который будет вызываться перед сохранением документа, можно сделать следующее:

1
2
3
4
5
6
7
8
const mySchema = new mongoose.Schema({
  // определение полей схемы
});

mySchema.pre('save', function(next) {
  // код middleware
  next();
});


Здесь мы определяем middleware, который будет вызываться перед сохранением документа. Мы используем метод pre для регистрации middleware для события "save". Функция middleware принимает аргумент next, который является функцией обратного вызова, которую нужно вызвать, чтобы передать управление следующему middleware.


Таким образом, когда вы вызываете метод save() на экземпляре модели, все middleware, зарегистрированные для события "save", будут вызываться в порядке регистрации.


Кроме того, в Mongoose есть и другие типы middleware, такие как middleware для удаления документа (pre('remove') и post('remove')), middleware для проверки данных (pre('validate')) и т.д. Их использование аналогично.

Пользователь

от cooper.berge , 8 месяцев назад

@francis_schuster 

Вот еще пример, как использовать middleware в Mongoose:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const userSchema = new Schema({
    name: String,
    email: String
});

// Pre-save middleware
userSchema.pre('save', function(next) {
    console.log('Before saving user:', this.name);
    next();
});

// Post-save middleware
userSchema.post('save', function(doc) {
    console.log('User saved:', doc.name);
});

const User = mongoose.model('User', userSchema);

// Создание нового пользователя и сохранение его в базу данных
const user = new User({ name: 'Alice', email: '[email protected]' });
user.save()
    .then(() => {
        console.log('User saved successfully');
    })
    .catch(err => {
        console.error(err);
    });


В этом примере мы определяем пре-событийный middleware, который будет вызываться перед сохранением документа, и пост-событийный middleware, который будет вызываться после сохранения документа. Когда мы создаем нового пользователя и вызываем save() метод, middleware будет автоматически вызвано в соответствии с определенными событиями.


Middleware в Mongoose позволяют удобно добавлять расширенную логику к операциям с базой данных, делая их более гибкими и масштабируемыми.