javascript - 413 请求实体在节点 js 中太大?
问题描述
我正在使用节点 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;
解决方案
因为:
parameterLimit 选项控制 URL 编码数据中允许的最大参数数。如果请求包含的参数多于该值,则会向客户端返回 413。默认为 1000。
您可以尝试以下选项:
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ extended: true,limit: '50mb', parameterLimit: 50000 }));
推荐阅读
- java - Java 迭代器 - 无限循环
- kotlin - 每次创建新的服务器实例时生成一个随机端口号
- java - Android Studio - 无法使用可执行文件确定 Java 版本
- java - java 文件在 cmd 中工作,但使用 .jar 扩展名重命名时返回错误
- assembly - 将 armv7m 指令翻译成 LLVM IR
- spring - 在 Spring Boot 中如何以及在何处保存“系统范围的数据”?
- javascript - 更改按钮 ID、内容和类的功能不起作用
- javascript - 如何使用 Debounce 去抖动句柄提交
- c# - 使用“Simple TCP”向服务器发送 TCP 数据包时,数据包一起参与
- c# - Camera.main.WorldToScreenPoint 是什么意思?