如何使用“cors”库在Express路径上配置CORS
问题描述:
我需要在每个端点上启用CORS,以匹配/api/v1/support/*
路径的POST请求。如何使用“cors”库在Express路径上配置CORS
我正在向凭证输入/api/v1/support/graphql
的POST请求,但预检请求(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);
答
能否请您试试这个。设置访问控制也
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);
这可能会帮助你
+0
谢谢,但它没有奏效。我的配置有什么问题? –
在服务器上是request.OPTIONS每规范,即访问控制允许的方法的法律,” .... 。,OPTIONS',除了浏览器做出'预检'请求之外,您还可能需要调整服务器以符合规范。请参阅access_control标题下的'ALLOW_ORIGIN','ALLOW_METHODS','ALLOW_HEADERS' –
浏览器不要'在CORS预检选项请求中发送凭证。显然,在您的应用程序代码的某处,您需要对'/ api/v1/support/graphql'路由进行验证,这对于POST请求来说很合适,因为如果您的前端代码将该凭证作为该POST的一部分发送,那会按预期工作。但是这对于OPTIONS请求并不好。如果没有服务器需要验证,这需要在没有任何证书发送的情况下运行。 – sideshowbarker