【发布时间】:2021-11-30 12:05:35
【问题描述】:
我已经像这样全局配置了 CORS,以处理凭据:
app.use(cors({ origin: 'https://example.com', credentials: true }))
但在某些路线上,我需要允许选项请求,所以按照文档,我正在做这样的事情:
router.options('/someroute', cors())
router.get('/someroute', cors(), someOtherMiddleware, async (req, res) => {
// do stuff
}
我认为我的全局 CORS 策略似乎覆盖了路由策略,但仅限于 options 方法。我试图想出一种方法来使这两种 CORS 策略都能很好地发挥作用。我也尝试了以下方法,但这也不起作用。无论我先放哪一个似乎都会覆盖另一个。
app.options('*', cors())
app.use(cors({ origin: 'https://example.com', credentials: true }))
【问题讨论】:
-
cors 中间件by default sets up a global
OPTIONShandler。您是说要为某些路线禁用它吗? -
如果我理解正确,在我设置特定来源的
app.use()中,是否使所有选项请求都需要该来源?如果是这样,那么是的,我需要为特定路由禁用它并允许选项请求的所有来源。 -
“是所有选项请求都需要那个来源吗?” 是的,对于所有跨域请求。虽然请求方法并没有真正进入它
-
app.use()涵盖所有类型的请求,包括 GET、PUT、POST、OPTIONS、HEAD、DELETE 等。 -
我真的不知道您在这里寻求帮助的问题是什么。如果您在所有路线之前指定了此
app.use(cors({ origin: 'https://example.com', credentials: true })),那么它将首先生效,并且如果它被配置为仅自动为您处理飞行前请求,那么它只会处理它并且没有其他路线将获得有机会看看。 Express 路由和中间件按照它们声明的顺序进行处理。
标签: javascript express cors middleware