Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NestJS 修改 POST 请求 body 大小限制 #46

Open
ChuChencheng opened this issue Aug 9, 2021 · 1 comment
Open

NestJS 修改 POST 请求 body 大小限制 #46

ChuChencheng opened this issue Aug 9, 2021 · 1 comment
Labels

Comments

@ChuChencheng
Copy link
Owner

关于 POST 请求的大小限制

根据网上随处可查到的资料,HTTP 规范没有强制限制 POST 请求内容的大小,一般是由浏览器或者服务端去限制。

NestJS 对 POST 请求的限制

最近在写 NestJS 时,遇到了一个报错 request entity too large
显然,字面上看,就是请求的 body 太大,超过了 NestJS 的限制

我们使用的是默认的底层,也就是 express ,因此这个是由 express 那边限制的
express 官方文档 也可以看到,默认限制是 100kb

image

修改限制

根据上述文档,我们只需要能修改那个 limit 配置即可

我们在 NestJS 项目的 main.ts 中加入以下代码:

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

这行代码可以成功运行,问题似乎也解决了。

但是这边有个隐藏的坑:

当我们使用 nest-cli 初始化项目后,可以看到在 package.json 中有 @types/express 这个包,但没有 express 本体。
由于 NestJS 底层默认使用 express ,因此 node_modules 里一般是会存在 express 包的。
因此我们用 import * as express from 'express' 引入使用 express 的功能,也是能正常运行的。

然而,在代码中使用 package.json 中没有声明的依赖,肯定是有风险的。
如果我们只使用 express 的 TypeScript 类型声明,那没问题,上述这个机制反而方便了开发。
但是我们使用了具体的功能,假设以后整个仓库换了 npm 包管理工具, node_modules 里面的依赖不再是扁平的,那代码就无法运行了。

做法1

因此,更保险的做法,我们可以只引入 express 底层用的 body-parser 库:

import * as bodyParser from 'body-parser'

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

做法2

当然,我们也可以直接在我们的依赖包里加上 express

预想

其实最好的做法还是 NestJS 官方提供个配置供修改

@ChuChencheng
Copy link
Owner Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant