请原谅我这个愚蠢的问题,但是有人能解释一下cors中间件是如何工作的吗?
我不小心调用了一个auth中间件,在它后面加了括号,它运行了那个中间件,甚至没有我请求那个路由。
我知道在函数之后添加括号调用它,但它是什么与cors中间件,我们在它之后添加这些括号??
cors中间件使用from docs:
app.get('/products/:id', cors(), function (req, res, next) {
res.json({msg: 'This is CORS-enabled for a Single Route'})
})
使用auth middleware with()给出错误:
app.get('/products/:id', auth(), function (req, res, next) {
res.json({msg: 'This is an authorized Route'})
})
使用不带()的认证中间件工作正常:
app.get('/products/:id', auth, function (req, res, next) {
res.json({msg: 'This is an authorized Route'})
})
函数可以返回其他函数,当您使用cors()
调用cors
函数时,您将返回一个新函数,该函数用作app.get()
中的中间件函数。您的cors()
示例可以重写如下:
const corsMiddlewareFn = cors();
app.get('/products/:id', corsMiddlewareFn, function (req, res, next) {
res.json({msg: 'This is CORS-enabled for a Single Route'})
})
上面我们将调用cors()
返回的函数存储在一个名为corsMiddlewareFn
的变量中,然后我们将其用作中间件,作为对app.get()
调用的一部分。让cors()
返回一个函数是有用的,因为它允许我们将选项传递给cors()
函数,以便它返回的中间件函数可以相应地使用这些选项。
另一方面,你的auth
函数很可能不返回一个函数,所以auth
本身是你想使用的中间件函数,而不是它的返回值,你会得到调用auth()
时。
cors
模块返回一个函数,该函数接受可选配置并返回中间件。
auth
已经是中间件,而不是函数,所以不需要调用它。