📜  PayloadTooLargeError:使用快速 json 中间件的请求实体太大 - Javascript (1)

📅  最后修改于: 2023-12-03 15:03:32.125000             🧑  作者: Mango

PayloadTooLargeError: Request entity too large with fast-json middleware - Javascript

在使用 fast-json 中间件时,如果请求体过大,可能会抛出 PayloadTooLargeError 错误。该错误表示请求实体太大,服务器无法处理。

解决方法
1. 增加请求体大小限制

可以通过在 express 中设置 bodyParserlimit 参数来增加允许的请求体大小限制。例如:

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

const app = express();

app.use(bodyParser.json({ limit: '50mb' }));

上述代码将允许最大请求体大小为 50MB。你可以根据需要进行调整。

2. 使用 stream 处理请求体

如果请求体过大,fast-json 中间件会尝试将整个请求体一次性读入内存,这可能导致内存不足错误。可以使用流处理请求体,这样可以逐块地处理请求。例如:

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

const app = express();

app.use(bodyParser.json({ limit: '50mb', type: 'application/json' }));

app.post('/upload', (req, res, next) => {
    let body = [];
    req.on('data', (chunk) => {
        body.push(chunk);
    }).on('end', () => {
        body = Buffer.concat(body).toString();
        // 然后使用 fast-json 处理请求体
        fastJson(body, (err, json) => {
            if (err) {
                next(err);
            } else {
                // 处理请求
            }
        });
    }).on('error', (err) => {
        next(err);
    });
});
结语

以上两种解决方法可以帮助你处理 PayloadTooLargeError 错误。根据你的需求,你可以选择更改请求体大小限制或使用流处理请求体。