快速中间件中的高阶功能

时间:2019-04-13 05:52:43

标签: javascript express

无法将参数发送给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 个答案:

答案 0 :(得分:1)

这里

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

您正在呼叫getAll,不带任何参数。要创建HoF,您应该这样创建

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

然后

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

这将使用getAll调用mentor函数,并返回一个函数引用,该引用将通过express分别使用reqres

答案 1 :(得分:0)

另一种方法是,module_name module_tpye to_select 0 eventOutput export 1 1 session export 0 的方式是通过express传递值,例如:

middleware