【问题标题】:413 Request Entity Too Large in node js?413 请求实体在节点 js 中太大?
【发布时间】:2021-04-29 12:55:24
【问题描述】:

我正在使用 node js express。我正在上传 pdf 并使用表单数据。但是当我调用 api 并发送文件时,我得到错误

413 Request Entity Too Large

我有下面的代码来解决这个问题,但它不起作用。

app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ extended: true,limit: '50mb' }));

下面是server.ts的文件代码。

import express, { Request, Response, NextFunction } from 'express';
const formData = require('express-form-data');
const os = require('os');
import { BAD_REQUEST } from 'http-status-codes';
import BaseRouter from './routes/index.route';
import morgan from 'morgan';
import logger from './shared/logger';
import cors from 'cors';
import fs from 'fs'
import { FilePath } from './shared/constants';

// creating default directories

const dir = FilePath;
if (!fs.existsSync(dir)) {
    fs.mkdirSync(dir);
}

// Init express
const app = express();

app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ extended: true,limit: '50mb' }));


// For form data
const options = {
    uploadDir: os.tmpdir(),
    autoClean: true
};
// parse data with connect-multiparty.
app.use(formData.parse(options));
// delete from the request all empty files (size == 0)
app.use(formData.format());
// change the file objects to fs.ReadStream
// app.use(formData.stream());
// union the body and the files
// app.use(formData.union());

// Cors
app.use(cors());

if (process.env.NODE_ENV === 'development') {
    app.use(morgan('dev'));
}

app.disable('etag');
app.use((req, res, next) => {
    let allowedOrigins: any = process.env.ALLOW_ORIGIONS || '*';
    const origin = req.headers.origin;
    if (allowedOrigins === '*') {
        res.setHeader('Access-Control-Allow-Origin', origin as string);
    } else {
        allowedOrigins = allowedOrigins.split(',');
        if (allowedOrigins.includes(origin)) {
            res.setHeader('Access-Control-Allow-Origin', origin as string);
        }
    }
    // res.header('Access-Control-Allow-Origin', process.env.ALLOW_ORIGIONS); // Will update DOmain later here
    res.header('Access-Control-Allow-Headers', '*');
    next();
});
app.use((req, res, next) => {
    console.log(req.originalUrl);
    next();
});
// Add APIs
app.use('/', BaseRouter);

app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
    console.log(req.originalUrl);
    logger.error(err.stack || err.message)
    return res.status(BAD_REQUEST).json({
        error: err.message,
    });
});




// Export express instance
export default app;

【问题讨论】:

标签: javascript node.js rest express form-data


【解决方案1】:

因为:

parameterLimit 选项控制参数的最大数量 URL 编码数据中允许的。如果请求包含更多 参数超过这个值,会返回413给客户端。 默认为 1000。

您可以尝试这些选项:

app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ extended: true,limit: '50mb', parameterLimit: 50000 }));

【讨论】:

  • 添加 parameterLimit 并没有帮助。仍然面临问题。
猜你喜欢
  • 2014-12-30
  • 2014-12-23
  • 2012-09-23
  • 2015-10-04
  • 2015-01-25
  • 2014-12-04
  • 2017-08-28
  • 2019-05-24
相关资源
最近更新 更多