предварительно сохранить промежуточное ПО в мангусте - PullRequest
0 голосов
/ 27 апреля 2020

Я впервые использую промежуточное ПО pre save и немного путаюсь с ним.

Он работает отлично, и мой метод сохранения выполняется даже в том случае, если я не вызываю next ()

case 1

tourSchema.pre('save', function () {
  console.log('first middleware is getting called');
})

Но когда мне это нравится, когда в параметрах функции объявляется next, но я не вызываю next (), он там зависает, и метод save не выполняется

case 2

tourSchema.pre('save', function (next) {
  console.log('first middleware is getting called');
});

Но как только я вызываю next (), он выполняется

case 3

tourSchema.pre('save', function (next) {
  console.log('first middleware is getting called');
  next()
});

, поэтому я хочу только знать, что случилось со вторым делом. В этом у меня есть только и только это предварительно промежуточное программное обеспечение. Какое значение может иметь определение следующего внутри параметров функции, метод save также должен выполняться во втором случае, поскольку у меня нет никакого второго промежуточного программного обеспечения.

1 Ответ

0 голосов
/ 27 апреля 2020

mon goose использует библиотеку kareem для управления перехватами.

kareems использует свойство length вашей функции перехвата, чтобы определить, определено ли next как аргумент или нет.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length

Ваша первая функция не имеет аргументов, kareem будет предполагать, что это syn c функция

const firstFunction = function () {
  console.log('first middleware is getting called');
})
console.log(firstFunction.length) // this will output 0

Ваша вторая функция имеет 1 аргумент, библиотека kareem увидит, что ваша функция принимает next аргументов. Он передаст обратный вызов и выполнит его в функции next. Поскольку next никогда не вызывается, этот обратный вызов никогда не будет вызываться.

const secondFunction = function (next) {
  console.log('first middleware is getting called');
})
console.log(secondFunction.length) // this will output 1
...