Zod is the most famous validation library in the TypeScript ecosystem. With Zod, you create a schema and validate your data according to the schema. Observe the schema below:
import { z } from 'zod' const UserSchema = z.object({ name: z.string().min(1), age: z.number({ coerce: true }).min(18), email: z.string().email(), })
This schema can be used to validate an object as follows:
const data = { name: 'John Doe', age: 18, email: '[email protected]', } // If there is a validation error, it throws an error const validatedData = UserSchema.parse(data) // If there is a validation error, it returns an error object for you to handle later const safeValidatedData = UserSchema.safeParse(data) // => { success: false; error: ZodError } // => { success: true; data: 'billie' }
Zod is capable of performing various types of validations on your data, so be sure to read the documentation for more details.
We can use Zod to validate the values present in process.env and even process them before using the environment variables in our application. Usually, I like to create an environment.ts file, as in the example below:
import { z } from 'zod' const environmentSchema = z.object({ // Define the possible values for NODE_ENV, always leaving a default value: NODE_ENV: z.enum(['test', 'development', 'production']).default('production'), // Environment variables are always defined as strings. Here, convert the string to a number and set a default value: PORT: z.number({ coerce: true }).default(3000), }) export const env = environmentSchema.parse(process.env)
Then, just import the variable and use it throughout my application:
import Fastify from 'fastify' import { env } from './environment.js' const app = Fastify({ logger: true }) app.listen({ port: env.PORT }, (err) => { if (err) { app.log.error(err) process.exit(1) } })
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3