Понимание синтаксического бита passport.authenticate ('local') - PullRequest
1 голос
/ 30 января 2020

tl; dr: Я хочу разобраться с битом (req, res) в конце кода.

Мне трудно понять фрагмент кода с использованием `passport.authenticate () 'с использованием локальной стратегии.

У меня есть следующий (рабочий) маршрут:

router.post("/login", function (req, res, next) {
  passport.authenticate('local', { session: false }, function (err, user, info)  {
    if (err || !user) {
      return res.status(400).send({
        message: "Something went wrong",
        user: user
      })
    }

      return res.send({user, info})
  }) (req, res) // What´s this??
})

Насколько я могу судить, маршрут вызывает passport.authenticate(), который затем вызывает локальную стратегию, которую я установил в другом файле, который в свою очередь возвращает err, user, info. После выполнения обратного вызова этот код обрабатывает возможные ошибки и, если все прошло нормально, отправляет обратно пользователю сообщения, настроенные в локальной стратегии ...

То, что я не понимаю, является последним немного. Что именно там делает 1014? Я знаю, что это критический бит, потому что маршрут не будет работать без этой строки, но я не понимаю, почему и что это такое (вызывает ли она функцию с параметрами req и res? Возвращает ли она req и res?) поскольку я не распознаю шаблон (он действительно напоминает IIFE, но опять же я не знаю, что именно он вызывает, поскольку passport.authenticate() сам по себе является вызовом функции ... или нет?

1 Ответ

1 голос
/ 30 января 2020

Передача параметров в функцию, которая будет возвращена.

пожалуйста, проверьте исходный код для получения дополнительной информации и посмотрите, что происходит.

passport / lib / middleware / authenticate . js

@ Dijkie85, простите, я был занят.

conider:

function getFoo(arg1, arg2) {
  return function getFoo(arg3, arg4) {
    return (arg3 + arg4) || "foo";
  }
}
console.log(getFoo()); // "Function: getFoo"
console.log(getFoo()()); // "foo"
console.log(getFoo()(1, 2)); // 3

в аутентификации. js файл, которым вы являетесь в той же ситуации тоже. Вы можете удалить логику для простоты и проверить снова:

module.exports = function authenticate(passport, name, options, callback) {
  return function authenticate(req, res, next) {
    ...
  }
}

req , res и next предоставляются express для возврата fucntion.

...