不允许选项方法 - 带express.js的节点服务器

问题描述 投票:0回答:1

我使用 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 方法

node.js cors vuejs3 fetch-api oas-tools
1个回答
0
投票

感觉你也需要将

cors()
传递给
app.options
https://expressjs.com/en/resources/middleware/cors.html#enabling-cors-pre-flight

app.options('*', cors(), (req, res) => { ... });

© www.soinside.com 2019 - 2024. All rights reserved.