在node.js中使用oas3-tools包、openapi 3.0时请求实体太大错误

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

index.js 文件

“使用严格”;

    var path = require('path');
    var http = require('http');
    var cors = require('cors');
    var oas3Tools = require('oas3-tools');

    require("dotenv").config({ path: ".env" });
    console.log(`### Running on ~~~ ${process.env.Instance} ~~~ ENV ###`);

    var serverPort = 8080;

    function validate(request, scopes, schema) {
        // security stuff here
        return true;
    }

    // swaggerRouter configuration
    var options = {
        routing: {
            controllers: path.join(__dirname, './controllers')
        },
        logging: {
            format: 'combined',
            errorLimit: 400
        },
    }; 


    var expressAppConfig = oas3Tools.expressAppConfig(
        path.join(__dirname, "./api/openapi.yaml"),
        options
      );
      expressAppConfig.addValidator();
      var app = expressAppConfig.getApp();

      app.use(cors());
      var json2xls = require('json2xls');
      app.use(json2xls.middleware);

    // Initialize the Swagger middleware
    http.createServer(app).listen(serverPort, function () {

    });


    // Connect to database 
    var mongo = require("./utils/db");

----------------------------------------EOF-------- --------------------------------------

PFB 我们使用的工具的版本。 "快递": "^4.17.1", “oas3-tools”:“2.1.3”

我尝试过 body-parser 和 app.use(express.json({limit:'25mb'}))。 但没有解决请求实体太大错误。 如果有人建议我任何不同的解决方案,那就太好了。

node.js express openapi http-status-code-413 oas3
2个回答
0
投票

这对我有用:

app._router.stack = app._router.stack.filter((i) => i.name !== 'jsonParser');
app.use(bodyParser.json({ limit: 5 * 1024 * 1024 }));

您可以在app._router.stack中看到所有中间件,其中由expressAppConfig函数(express.app.config.js)填充。

我发现当你使用 bodyParser.json() 时,它会向该堆栈添加另一个中间件层 - 但根据我的观察,express 将使用第一个中间件层。这就是为什么我在设置限制之前删除了所有 jsonParser 。


0
投票

我可以通过在任何其他中间件之前配置 body-parser 中间件来使其工作,而不是手动过滤中间件堆栈以删除默认的 JSON 解析器。这确保了使用自定义主体解析器配置。

看起来是这样的:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// Use body-parser with higher payload limits
app.use(bodyParser.json({ limit: '5mb' }));
app.use(bodyParser.urlencoded({ extended: true, limit: '5mb' }));

// swaggerRouter configuration
var options = {
  routing: {
      controllers: path.join(__dirname, './controllers')
  },
};

// Initialize the Swagger router
var expressAppConfig = oas3Tools.expressAppConfig(path.join(__dirname, 'api/openapi.yaml'), options);

// Apply CORS middleware to /api routes
app.use('/api', cors({
origin: 'http://localhost',
optionsSuccessStatus: 200
}), expressAppConfig.getApp());



app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
© www.soinside.com 2019 - 2024. All rights reserved.