请求实体在使用OAS3-Tools软件包时,node.js中的OpenAPI 3.0太大错误

发布于 2025-02-11 13:49:35 字数 1577 浏览 2 评论 0原文

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");

------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------

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

我尝试了身体parser and app.use(express.json({limit:'25mb'}))。 但是,没有什么可以解决请求实体太大的错误。 如果有人建议我有不同的解决方案,那就太好了。

index.js file

'use strict';

    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 the version of the tools which we've used.
"express": "^4.17.1",
"oas3-tools": "2.1.3"

I've tried body-parser and app.use(express.json({limit:'25mb'})).
But nothing resolved the request entity too large error.
It would be great if anyone suggest me any different solution.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月寒剑心 2025-02-18 13:49:36

我没有手动过滤中间件堆栈以删除默认的JSON解析器,而是能够通过在任何其他中间件之前配置Body-Parser中间件来使其起作用。这确保了使用自定义的身体偏好器配置。

这是这样的外观:

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');
});

Instead of manually filtering the middleware stack to remove the default JSON parser, I was able to make it work by configuring the body-parser middleware before any other middleware. This ensured that the custom body-parser configuration was used.

Here's how that looked:

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');
});
灯下孤影 2025-02-18 13:49:35

这对我有用:

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

您可以在expressappConfig函数(Express.app.config.js)填充的App._router.stack中看到所有中间件。

我发现当您使用BodyParser.json()时,它将在该堆栈中添加另一个中间件层 - 但是从我的观察中,Express将使用第一个。这就是为什么我在设置限制之前删除所有JSONPARSER的原因。

This works for me:

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

You can see all the middleware in app._router.stack which is populated by expressAppConfig function (express.app.config.js).

I found out when you use bodyParser.json(), it will add another middleware layer to that stack - but from my observation, express will use the first one. That's why I removed all jsonParser before setting the limit.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文