我使用 Swagger 生成了一个服务器存根,添加了我的业务逻辑,现在遇到了问题。
当我的前端(Vue)发送 post 请求时,我总是收到消息“OPTIONS method not allowed”。
我可以使用curl发送帖子数据,一切正常,但是当浏览器和我的前端尝试它时,我总是收到单独的选项请求和不允许选项方法的错误。
'use strict';
var path = require('path');
var http = require('http');
var oas3Tools = require('oas3-tools');
var cors = require('cors');
var serverPort = 8080;
// swaggerRouter configuration
var options = {
routing: {
controllers: path.join(__dirname, './controllers'),
exposeApi: true // This will enable separate handling of OPTIONS requests
},
};
var expressAppConfig = oas3Tools.expressAppConfig(path.join(__dirname, 'api/openapi.yaml'), options);
var app = expressAppConfig.getApp();
// Use CORS middleware
app.use(cors());
// Define a separate handler for OPTIONS requests
app.options('*', (req, res) => {
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.send();
});
// Initialize the Swagger middleware
http.createServer(app).listen(serverPort, function () {
console.log('Your server is listening on port %d (http://localhost:%d)', serverPort, serverPort);
console.log('Swagger-ui is available on http://localhost:%d/docs', serverPort);
});
向我的 API 发送 POST 请求,但它不起作用,因为不允许使用 OPTIONS 方法
感觉你也需要将
cors()
传递给app.options
:https://expressjs.com/en/resources/middleware/cors.html#enabling-cors-pre-flight
app.options('*', cors(), (req, res) => { ... });