CORS 标头不适用于 Express 云功能中的特定路由
Posted
技术标签:
【中文标题】CORS 标头不适用于 Express 云功能中的特定路由【英文标题】:CORS header not applied for a particular route in Express cloud functions 【发布时间】:2020-10-20 13:19:26 【问题描述】:我为云功能实现了一个基本的快速应用程序。我使用了 cors 库来启用 cors。有 4 个 api 端点,所有 4 个都需要预检。出于某种原因,access-control-allow-origin:*
标头放置在 3 条路线上,而不是第 4 条路线上。
准确地说,我正在使用 Content-Type: application/json 进行 POST 请求,这需要进行预检。所有端点都需要相同的标头,但不适用于最后一个。
代码sn-ps:
const express = require("express");
const cors = require("cors");
const bodyParser = require('body-parser');
const admin = require("firebase-admin");
admin.initializeApp();
const app = express();
app.use(cors());
app.use(bodyParser.json());
app.use(express.json());
app.use('/', require('./controllers'));
exports.apiv2 = functions.https.onRequest(app);
路线:
const express = require('express');
const router = express.Router();
router.use('/create-player', require('./createPlayer'));
router.use('/create-game', require('./createGame'));
router.use('/join-game', require('./joinGame'));
router.use('/move', require('./makeMove'));
// 404 error handler for invalid player and game IDs
router.use((err, req, res, next) =>
res.json( error: err.msg );
);
module.exports = router;
仅对于 /move 路由,cors 请求失败,即使在预检请求通过后也是如此。 Preflight passes with 204。实际请求由于某种原因失败。 The POST request fails
是否有任何特定的访问控制标头不是由 express 仅针对一个端点放置的?
【问题讨论】:
【参考方案1】:您可以在app.js
中的路由中间件之前设置此中间件来解决这个问题:
// app.js
...
app.use(function (req, res, next)
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
if ('OPTIONS' === req.method)
res.sendStatus(200);
else
next();
);
...
app.use(routes);
然后,这将应用于您的所有路线。
【讨论】:
cors
已在代码中使用。它基本上是一样的。以上是关于CORS 标头不适用于 Express 云功能中的特定路由的主要内容,如果未能解决你的问题,请参考以下文章
启用 CORS 不适用于 Spotify Web API [重复]
xmlHttp.getResponseHeader + 不适用于 CORS
Cors 不适用于 XMLhttprequest 节点/快递