Open ChuChencheng opened 3 years ago
根据网上随处可查到的资料,HTTP 规范没有强制限制 POST 请求内容的大小,一般是由浏览器或者服务端去限制。
最近在写 NestJS 时,遇到了一个报错 request entity too large 显然,字面上看,就是请求的 body 太大,超过了 NestJS 的限制
request entity too large
我们使用的是默认的底层,也就是 express ,因此这个是由 express 那边限制的 从 express 官方文档 也可以看到,默认限制是 100kb
根据上述文档,我们只需要能修改那个 limit 配置即可
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
@types/express
node_modules
import * as express from 'express'
然而,在代码中使用 package.json 中没有声明的依赖,肯定是有风险的。 如果我们只使用 express 的 TypeScript 类型声明,那没问题,上述这个机制反而方便了开发。 但是我们使用了具体的功能,假设以后整个仓库换了 npm 包管理工具, node_modules 里面的依赖不再是扁平的,那代码就无法运行了。
因此,更保险的做法,我们可以只引入 express 底层用的 body-parser 库:
import * as bodyParser from 'body-parser' app.use(bodyParser.json({ limit: '1mb' }))
当然,我们也可以直接在我们的依赖包里加上 express
其实最好的做法还是 NestJS 官方提供个配置供修改
https://docs.nestjs.com/faq/raw-body#body-parser-size-limit NestJS 已内置
关于 POST 请求的大小限制
根据网上随处可查到的资料,HTTP 规范没有强制限制 POST 请求内容的大小,一般是由浏览器或者服务端去限制。
NestJS 对 POST 请求的限制
最近在写 NestJS 时,遇到了一个报错
request entity too large
显然,字面上看,就是请求的 body 太大,超过了 NestJS 的限制我们使用的是默认的底层,也就是 express ,因此这个是由 express 那边限制的 从 express 官方文档 也可以看到,默认限制是 100kb
修改限制
根据上述文档,我们只需要能修改那个
limit
配置即可我们在 NestJS 项目的 main.ts 中加入以下代码:
这行代码可以成功运行,问题似乎也解决了。
但是这边有个隐藏的坑:
当我们使用 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 库:
做法2
当然,我们也可以直接在我们的依赖包里加上 express
预想
其实最好的做法还是 NestJS 官方提供个配置供修改