const baseHandler: APIGatewayProxyHandlerV2 = async (event) => {
return service.create(event.body);
}
const inputSchema = {
type: "object",
properties: {
body: {
type: "object",
properties: {
year: { type: "number" },
questionId: { type: "string" },
propSeq: { type: "number" },
questionTitle: { type: "string" },
propContent: { type: "string" },
isTrue: { type: "boolean" },
chapter: { type: "number" }
},
required: ["year", "questionId", "propSeq", "questionTitle", "propContent", "isTrue", "chapter"],
},
},
};
export const handler = middy(baseHandler)
.use(jsonBodyParser())
.use(validator({inputSchema}))
.use(httpErrorHandler())
I'm writing AWS Lambda code on Serverless Framework.
I wanted request body validator like express-validator
, so I found middy
.
But it looks impossible to validate the length of something.
I want to force the length of year
to 4.
for example, 2023(o), 23(x)
properties: {
year: { type: "number", length: 4 }
}
As you guess, length
property cannot be understood.
I don't want to add some codes to baseHandler function to validate the length.
Thank you in advance.
Middy uses JSONSchema, so you can use anything that is compatible with JSONSchema there. You could use
length
, but then you'd need to switch the type tostring
fromnumber
, aslength
is not supported fornumber
(rightfully so in my opinion). If you want to keep it asnumber
, then probably using range-based validation is your best bet: https://json-schema.org/understanding-json-schema/reference/numeric.html#range