

Serverless + Typescriptを使用した際にバリデーションチェックエラーについて行き詰っており、ご相談させてください。

frameworkVersion:3  
serverlessのテンプレートから作成  
※テンプレートから作成した状態から説明いたします

curlを使用してPostリクエストをおこなった場合に下記エラーとなります。  
このエラーをソース側で開発者が定義したエラーに変更する方法はございませんでしょうか  
※Postリクエストのbodyにnameを指定していないのでことで発生させています

[code]

    {"errorMessage":"Request body validation failed: requires property \"name\"","errorType":"Error","offlineInfo":"If you believe this is an issue with serverless-offline please submit it, thanks. https://github.com/dherault/serverless-offline/issues"
    
[/code]

目的としては、validationエラーを開発者が定義したエラーメッセージに変更したいです。

試したこと（どれも上手くいかず・・）  
・middyのonErrorでハンドリング  
・@middy/http-error-handlerを使用してハンドリング

ご助力よろしくお願いいたします。

### 関連するソースコード

■schema.ts

[code]

    export default {
      type: "object",
      properties: {
        name: { type: 'string', minLength: 1  },
        bangou: {
          type: 'number',
        },
      },
      required: ['name']
    } as const;
    
[/code]

■handler.ts

[code]

    import type { ValidatedEventAPIGatewayProxyEvent } from '@libs/api-gateway';
    import { formatJSONResponse } from '@libs/api-gateway';
    import { middyfy } from '@libs/lambda';
    
    import schema from './schema';
    
    const hello: ValidatedEventAPIGatewayProxyEvent<typeof schema> = async (event) => {
      return formatJSONResponse({
        message: `Hello ${event.body.name}, welcome to the exciting Serverless world!`,
        event,
      });
    };
    
    export const main = middyfy(hello);
    
[/code]

■lambda.ts

[code]

    import middy from "@middy/core"
    import middyJsonBodyParser from "@middy/http-json-body-parser"
    
    export const middyfy = (handler) => {
      return middy(handler).use(middyJsonBodyParser())
    }
    
[/code]

■api-gateway.ts

[code]

    import type { APIGatewayProxyEvent, APIGatewayProxyResult, Handler } from "aws-lambda"
    import type { FromSchema } from "json-schema-to-ts";
    
    type ValidatedAPIGatewayProxyEvent<S> = Omit<APIGatewayProxyEvent, 'body'> & { body: FromSchema<S> }
    export type ValidatedEventAPIGatewayProxyEvent<S> = Handler<ValidatedAPIGatewayProxyEvent<S>, APIGatewayProxyResult>
    export const formatJSONResponse = (response: Record<string, unknown>) => {
      return {
        statusCode: 200,
        body: JSON.stringify(response)
      }
    }
    
[/code]

■index.ts

[code]

    import schema from './schema';
    import { handlerPath } from '@libs/handler-resolver';
    
    export default {
      handler: `${handlerPath(__dirname)}/handler.main`,
      events: [
        {
          http: {
            method: 'post',
            path: 'hello',
            request: {
              schemas: {
                'application/json': schema,
              },
            },
          },
        },
      ],
    };
    
[/code]


CC BY-SA 4.0
2023-05-04T14:42:27.833
94739
2023-05-08T02:04:03.243
2023-05-08T02:04:03.243
3060
58164
question
json typescript aws-lambda
Serverless + Typescriptを使用したjson schemaのバリデーションチェックエラーについて