Метод не вернет правильный, если не заключен в функцию стрелки - PullRequest
0 голосов
/ 06 сентября 2018

В моем Node / Express API для защиты моих маршрутов я использую passport.authenticate

app.get('/', passport.authenticate('jwt', { session: false}), (req, res) => { //whatever })

У меня есть дополнительное промежуточное ПО на этих маршрутах, и оно становится довольно длинным, и я не хотел требовать паспорт во всех моих файлах маршрутизатора, поэтому внутри отдельного файла я создал другой метод для существующего объекта аутентификации, который называется protect

const auth = {
   protect() {}
}

Это позволяет мне сделать это

app.get('/', auth.protect, (req, res) => { //whatever })

Изначально я пытался вернуть passport.authenticate строку

const auth = {
   protect() {
      return passport.authenticate('jwt', { session: false})
   }
}

Но это не работает

Затем я обернул его внутри функции стрелки

const auth = {
    protect() {
       () => passport.authenticate('jwt', { session: false})
    }
}

Теперь, когда я звоню auth.protect на моих маршрутах, все работает просто отлично.

Дополнительно, если я просто экспортирую функцию стрелки

export const protect = () => {
   return passport.authenticate('jwt', { session: false})
}

Это также работает, когда я звоню protect на моих маршрутах.

Почему мне нужно возвращать функцию стрелки с кодом, который я хочу запустить, почему первый пример с возвратом не работает, когда я вызываю функцию на своем маршруте?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Wktrf на деньги. Для уточнения: app.get () требует двух аргументов, пути и функции обратного вызова. http://expressjs.com/en/api.html#app.get

const auth = {
   protect() {
      return passport.authenticate('jwt', { session: false})
   }
}

Выше приведен результат passport.auth. Однако в качестве аргумента для app.get () требуется функция.

const auth = {
    protect() {
       () => passport.authenticate('jwt', { session: false})
    }
}

Ваш второй пример возвращает функцию: () => passport.authenticate('jwt', { session: false}) С каким app.get () можно работать

Надеюсь, это поможет.

0 голосов
/ 06 сентября 2018

Первый пример, кажется, возвращает результат выполнения функции, второй возвращает функцию.

...