【问题标题】:Express Body-parser File upload size limit not workingExpress Body-parser 文件上传大小限制不起作用
【发布时间】:2022-04-14 01:38:23
【问题描述】:

我的快递应用:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var less = require("express-less")

var session = require("express-session")
var FileStore = require("session-file-store")(session)

var router = require('./router');

var app = express();

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use('/css', less(__dirname + '/less'));

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(session({
  secret: "secret message that is obviously not the one i'm using in my code",
    resave: true,
    saveUninitialized: true
}));

app.use('/', router);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

(只是express-generator生成的代码,有一些补充)

线条

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

应该将最大限制设置为我设置的最大限制,但是,我已经在互联网上进行了广泛的搜索,但还没有找到可行的解决方案。当我尝试通过 XMLHttpRequest 向服务器发送大于 100kb 的图像时,出现 413(有效负载过大)错误。

还有人建议我使用“MB”而不是“mb”,但这不起作用。

【问题讨论】:

  • 您在 bodyParser 下面设置的 express.json() 和 express.urlencoded() 是否会撤消您的大小限制设置?我会尝试删除它。
  • 我已经解决了这个问题,但我不记得是如何解决的,但它与我认为的请求标头有关
  • 我的问题最终是 nginx 中的 client_max_body_size 值(甚至不在我的配置中,所以它最终默认为 1m)
  • 实际上,这听起来是对的。 ??????

标签: javascript express file-upload xmlhttprequest


【解决方案1】:

在我的情况下,与@ch1pn3ss 的情况一样,问题是在我的应用程序和客户端/用户之间存在代理。在@ch1pn3ss 的情况下,它是 nginx,在我的情况下,它是一个基于节点/express 的反向代理服务器。因此,如果您的服务器和用户之间存在问题,那么您也必须提高限制。

我之前犯的另一个错误是解析器 use 调用的多个实例,例如:

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

// ... later in the code:
app.use(bodyParser.json({limit: '50mb'}));

我一直在更改后一个,但没有意识到它实际上被忽略了,因为前一个已将限制设置为 1mb。

【讨论】:

  • 鉴于我现在所知道的,这听起来似乎是合理的。我会将此答案标记为已接受,即使我无法对其进行测试,因为我不记得原始项目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多