Функция высокого порядка в промежуточном программном обеспечении Express - PullRequest
0 голосов
/ 13 апреля 2019

Невозможно отправить параметры функции высокого порядка в JS.Функция не получает req и res args

// In router.js

const { getAll } = require('./controller')
router.get('/coordinadores', getAll()('mentor'))

// In controller.js

exports.getAll = (req, res) => {
  return (role) => {
    var filter = { role }
    if (req.user.role == 'mentor') filter = { role, centro: { "$in": req.user.centro } }
    Model.find(filter, '-password -role -__v -createdAt -updatedAt -centro').lean().exec()
      .then(list => { res.status(200).json({ list }) })
      .catch(err => { errorHandler(req, res, err) })
  }
}

// Result
// TypeError: Cannot read property 'user' of undefined

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Здесь

router.get('/coordinadores', getAll()('mentor'))

вы звоните getAll без каких-либо аргументов. Чтобы создать HoF, вы должны создать его следующим образом

const getAll = role => (req, res) => {
  // your code 
}

, а затем

router.get('/coordinadores', getAll('mentor'))

это вызовет функцию getAll с mentor и вернет ссылку на функцию, которая будет вызываться с req и res по экспрессу

0 голосов
/ 13 апреля 2019

Для альтернативы, express способ передать значения через middleware, например:

function setDefaultRole((req, res, next) => {
  if (not some check here) {
    // if check fails, setting default role
    req.user.role = 'mentor'
  }
  // call the next middleware
  next();
})

function getAll((req, res, next) => {
  if (req.user.role == 'mentor') {
    // continue logic
    filter = ???
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...