【发布时间】:2018-11-07 18:48:56
【问题描述】:
我有一个单独的前端和后端,所有对http://frontend.com/api 的请求都被代理到后端。但是,我们允许上传的图片最大为 10mb,这受到所有请求正文中 express 的 1mb 内部限制的限制。
我有以下配置:
const express = require('express');
const consola = require('consola');
const { Nuxt, Builder } = require('nuxt');
const helmet = require('helmet');
// Express
const app = express();
const host = process.env.HOST || '127.0.0.1';
const port = process.env.PORT || 8080;
app.set('port', port);
// Import and Set Nuxt.js options
const config = require('../nuxt.config.js');
config.dev = !(process.env.NODE_ENV === 'production');
async function start() {
// Init Nuxt.js
const nuxt = new Nuxt(config);
if (config.dev) {
const builder = new Builder(nuxt);
await builder.build();
}
// NOTE: Only in production mode
if (!config.dev) {
// Helmet default security + Referrer + Features
app.use(helmet());
}
// Proxy /api to proper backend
app.use('/api', proxy(process.env.API_ENDPOINT || 'http://localhost:3000'));
// Give nuxt middleware to express
app.use(nuxt.render);
// Listen the server
app.listen(port, host);
consola.ready({
message: `Server listening on http://${host}:${port}`,
badge: true,
});
}
start();
我尝试添加 body-parser,直到我发现这仅适用于非 multipart/form 类型的请求。考虑到这不是一个快速的后端,而只是用于服务 SSR(使用 nuxt),我不知道如何让它与 multer 或 busboy 之类的东西一起使用。
无需将 nginx 设置为反向代理就可以做到这一点吗?
【问题讨论】:
-
我使用了听起来与您类似的设置,并使用 multer 并使用它设置我的上传限制。如果您想查看,我可以在答案中发布我的代码。我还没有尝试过超过 1mb 的文件,所以不能保证,但它可能会起作用。告诉我。
-
很高兴看到一个示例,想知道您是硬编码端点还是仅将其用作解析主体的代理。
-
“受到所有请求正文中 express 的 1mb 内部限制”。但是,没有这样的事情。也许您正在使用的其他中间件之一(
helmet、proxy)负责施加限制。您收到的错误的堆栈跟踪可能会提供一些见解。 -
@robertklep 你是对的,我可以发誓我读到 express 在某处施加了限制,然后想一想,作为一个很难改变的默认值不会很有利可图.我能找到的唯一明确限制是 json 正文:expressjs.com/en/api.html#express.json。最后,“express-force-https”为所有代理请求设置了 1mb 的硬限制。改变这个解决了这个问题。如果你能给出答案,我很乐意接受:)。
-
@user1213904
express-force-https也没有设置限制:)