🔖

NestJSにPOSTすると「Field value too long」がレスポンスとして返却される

2024/03/16に公開

はじめに

バックエンドをNestJSで作成し、作成したユーザープロフィール更新用のAPIに大きな画像ファイルを添付してアップロードすると次のようなエラーがAPIから返却されました(400 Bad Request)

{
	"message": "Field value too long",
	"error": "Bad Request",
	"statusCode": 400
}

解決策

例えば次のようなmodule.tsだったとします。

src/modules/user/user.module.ts
import { UserController } from './user.controller';
import { UserService } from './user.service';
import { HttpModule } from '@nestjs/axios';

@Module({
  imports: [HttpModule],
  controllers: [UserController],
  providers: [UserService],
})

次のようにファイルを書き換えて、ファイルのアップロードサイズの上限を上げます。

src/modules/user/user.module.ts
import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';
import { HttpModule } from '@nestjs/axios';
import { MulterModule } from '@nestjs/platform-express';

// ファイルアップロードの最大サイズ
const MULTER_UPLOAD_FIELD_SIZE = 5 * 1024 * 1024; // 5MB

@Module({
  imports: [
    HttpModule,
    MulterModule.register({
      limits: { fieldSize: MULTER_UPLOAD_FIELD_SIZE },
    }),
  ],
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {}

備考

NestJSの公式ドキュメントにあるようにNestJSはファイルのアップロードにExpress用のmulterミドルウェアパッケージをベースにしたモジュールを使用しています。

Expressの公式ドキュメントを見るとfieldSizeが1MBなので、これを拡張した形になります。

参考資料

Field value too long · Issue #436 · expressjs/multer

Discussion