Javascript express中间件中的高阶函数
无法将参数发送到JS中的高阶函数。函数没有获取req和res参数Javascript express中间件中的高阶函数,javascript,express,Javascript,Express,无法将参数发送到JS中的高阶函数。函数没有获取req和res参数 // In router.js const { getAll } = require('./controller') router.get('/coordinadores', getAll()('mentor')) // In controller.js exports.getAll = (req, res) => { return (role) => { var filter = { role }
// 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
这里
您正在调用getAll
,没有任何参数。要创建HoF,您应该像这样创建它
const getAll = role => (req, res) => {
// your code
}
然后
router.get('/coordinadores', getAll('mentor'))
这将使用
mentor
调用getAll
函数,它将返回一个函数引用,该函数引用将通过express调用req
和res
,例如:
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 = ???
}
})
但是请注意,
角色
在req
对象上不可用
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 = ???
}
})