【发布时间】:2017-02-23 04:26:36
【问题描述】:
有人可以解释一下这里发生了什么吗?我知道这些是 express 的中间件,我正在查看语法。
我了解 mustBeLoggedIn 的 es6 语法,但我不确定 const forbidden = message => (req, res, next) => { 在做什么。 message 是在 req, res, next 之前的另一个参数吗?如果是这样,为什么不在括号中?我最初认为这只是为函数分配另一个变量名。所以我可以称它为forbidden() 或message(),不是吗?但看看它是如何被使用的,它看起来更像是一个参数......
我注意到的另一件有趣的事情是中间件forbidden 在get 请求中被调用,而mustBeLoggedIn 只是被传递而不被调用。为什么?
const mustBeLoggedIn = (req, res, next) => {
if (!req.user) {
return res.status(401).send('You must be logged in')
}
next()
}
const forbidden = message => (req, res, next) => {
res.status(403).send(message)
}
module.exports = require('express').Router()
.get('/', forbidden('only admins can list users'), (req, res, next) =>
User.findAll()
.then(users => res.json(users))
.catch(next))
.post('/', (req, res, next) =>
User.create(req.body)
.then(user => res.status(201).json(user))
.catch(next))
.get('/:id', mustBeLoggedIn, (req, res, next) =>
User.findById(req.params.id)
.then(user => res.json(user))
.catch(next))
【问题讨论】:
标签: javascript node.js express ecmascript-6