Запрос не выполнен с кодом состояния 413, объект запроса слишком большой - PullRequest
1 голос
/ 03 февраля 2020

У меня есть сервер node.js в сочетании с веб-интерфейсом js. У меня есть форма, которая требует от пользователей загружать файлы в AWS S3 корзину. Я использую Multer. js для обработки загрузки файла. Я установил размер загрузки по умолчанию максимум 10 МБ. Пока нет абсолютно никаких проблем с загрузкой файлов, если их размер меньше 10 Мб при тестировании с использованием localhost. Однако, когда я пытаюсь сделать то же самое с моего Nginx веб-сервера, я получаю сообщение «Ошибка 413: запрос слишком большой сущности» при попытке загрузить что-нибудь, что превышает 1 МБ. Я пытался следовать решениям здесь и здесь , но безуспешно.

Я не выдаю никакой ошибки, кроме 413 Error, которую ловит мое приложение.

Вот код моего загрузчика express (ссылаясь на это, потому что я пробовал решения, упомянутые выше для этих строк кода).

const express = require("express");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const helmet = require("helmet");
const cors = require("cors");
const morgan = require("morgan");
const path = require("path");
const appRoot = require("app-root-path");

const loadRoutes = require("../api");
const logger = require("./logger");
const { userRoles } = require("../utils/consts");

const authService = require("../services/AuthService");

const expressLoader = (app) => {

    app.use(cors());

    app.use(express.static(path.join(appRoot.path, "public", "users")));
    //app.use(express.static(path.join(appRoot.path, "public", "admin")));

    // ATTACH IP ADDRESS TO EACH REQUEST
    app.use((req, res, next) => {
        req.ipAddress = req.headers["x-forwarded-for"] || req.connection.remoteAddress;
        return next();
    });

    // Extract token from header
    app.use((req, res, next) => {

        const token = req.headers["authorization"] ? req.header("authorization").split(" ")[1] : null;

        if (token) {
            req.token = token;
        }

        return next();
    });

    // Verify token
    app.use(async (req, res, next) => {

        if (req.token) {

            const decode = await authService.verifyAuthToken(req.token);

            console.log(decode);

            if (!decode.tokenValid) {

                logger.error(`[INVALID JWT ${req.path}] ip: ${req.ipAddress}`);
                logger.error(decode.err);

                req.isAuth = false;
                return next();

            } else {

                req.isAuth = true;
                req.decode = decode.data;

                return next();
            }
        }

        return next();
    });

    // Check if is admin
    app.use((req, res, next) => {

        const roleId = req.decode ? req.decode.role_id : null;

        if (req.isAuth && (roleId === userRoles.SYSOP || roleId === userRoles.ADMIN)) {

            req.isAdmin = true;
            return next();
        }

        return next();
    });

    app.use(morgan("combined", { stream: logger.stream }));
    app.use(helmet());
    app.use(bodyParser.json({ limit: '50mb' }));
    app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
    //app.use(cookieParser(process.env.SCOOK_SECRET));
    // app.enable("trust proxy"); TO BE ENABLED FOR NGINX

    // LOAD API
    app.use(process.env.API_PREFIX, loadRoutes());

    // app.use("/admin", (req, res, next) => {
    //     logger.info(`[ADMIN ROUTE ACCESSED FROM ${ req.ip }]`);
    //     return res.sendFile(path.join(appRoot.path + "/public/admin/index.html"));
    // });

    app.get("*", (req, res, next) => {
        return res.sendFile(path.join(appRoot.path + "/public/users/index.html"));
    });
}

module.exports = expressLoader;

Любая помощь будет оценена, спасибо!

...