【问题标题】:How to configure CORS on a Express Route using "cors" library如何使用“cors”库在 Express Route 上配置 CORS
【发布时间】:2018-05-01 21:04:45
【问题描述】:

我需要在每个端点上为匹配 /api/v1/support/* 路径的 POST 请求启用 CORS。

我正在向/api/v1/support/graphql 发出 POST 请求,凭据为 true,但预检请求(OPTIONS 请求)返回 401。我不确定自己做错了什么。

这是我的配置(请注意,我在下面的示例中更改了虚拟域的实际域):

const corsOptions = {
  origin: /mydomain\.com$/,
  credentials: true,
  maxAge: 3600
};
app.options('/api/v1/support/*', cors(corsOptions));
app.post('/api/v1/support/*', cors(corsOptions));

// graphQLRouter is an instance of express.Router()
app.use('/api/v1/support/graphql', [ fowardIP, validateTokenInCookie ], graphQLRouter);

【问题讨论】:

  • 服务器上的 request.OPTIONS 根据规范合法,即 Access-Control-Allow-Methods', '.....,OPTIONS' 所以除了浏览器发出 'preflight' 请求,您可能还需要调整服务器以符合规范。请参阅 access_control 标头下的 'ALLOW_ORIGIN' 、 'ALLOW_METHODS' 、 'ALLOW_HEADERS'
  • 浏览器不会在 CORS 预检 OPTIONS 请求中发送凭据。显然,在您的应用程序代码中的某处,您有 /api/v1/support/graphql 路由所需的身份验证,这对于 POST 请求很好,因为如果您的前端代码将凭据作为该 POST 的一部分发送,那将按预期工作。但这对于 OPTIONS 请求并不好。这需要在不发送任何凭据的情况下工作 - 无需服务器要求身份验证。

标签: node.js express cors


【解决方案1】:

请你试试这个。还设置访问控制

const app = express();
const corsOptions = {
  origin(origin, callback) {
    callback(null, true);
  },
  credentials: true
};
app.use(cors(corsOptions));
var allowCrossDomain = 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,token');
  next();
}
app.use(allowCrossDomain);

这可能对你有帮助

【讨论】:

  • 谢谢,但没用。我的配置有什么问题?
猜你喜欢
  • 2021-05-03
  • 2018-11-05
  • 2021-10-28
  • 2013-10-19
  • 2021-03-28
  • 2018-03-05
  • 2021-04-04
  • 2021-03-24
  • 2020-10-25
相关资源
最近更新 更多