Description
关于 POST 请求的大小限制
根据网上随处可查到的资料,HTTP 规范没有强制限制 POST 请求内容的大小,一般是由浏览器或者服务端去限制。
NestJS 对 POST 请求的限制
最近在写 NestJS 时,遇到了一个报错 request entity too large
显然,字面上看,就是请求的 body 太大,超过了 NestJS 的限制
我们使用的是默认的底层,也就是 express ,因此这个是由 express 那边限制的
从 express 官方文档 也可以看到,默认限制是 100kb
修改限制
根据上述文档,我们只需要能修改那个 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 官方提供个配置供修改