Executando verificação de segurança...
1

Utilização da lib zod no node js

Olá pessoal estou utilizando a lib zod em um projeto node js para validação de payloads, porém estou fazer uma validação no payload e n está dando certo, na documentação existe o método trim(), porém ao aplicar ele não funciona, alguem sabe como resolver ?

Segue código:

export const createStoreSchema = object({ body: object({ name: string() .trim() .min(2, { message: 'O campo nome deve ter ao menos 2 caracteres' }), }), });

Carregando publicação patrocinada...
2

O método .trim() que você usou no trecho de código removerá os espaços em branco de ambas as extremidades da string.

Usando um pipe, você pode primeiro remover os espaços em branco e, em seguida, realizar validações adicionais.

Tente isso:

import { z } from "zod";

const test = z.object({
  name: z.string().transform(e => e.replace(/\s+/g, ''))
.pipe(z.string().min(1, { message: 'required' }).toLowerCase())
})

const result = test.safeParse({
  name: "P a lavra com Espaço"
})


A baixo o retorno:

npx ts-node index.ts { success: true, data: { name: 'palavracomespaço' } }

1

Realmente não sei pq n funciona, eu tenho um arquivo chamado createBrandSchema.js que é esse de baixo.

import { object, string } from 'zod';
export const createBrandSchema = object({
  body: object({
    name: string({
      required_error: 'Nome da marca é obrigatório',
    })
      .transform(e => e.replace(/\s+/g, ''))
      .pipe(string().min(1, { message: 'required' }).toLowerCase()),
  }),
});

E o arquivo validate.js recebe como schema e faz a validações necessárias

import { ZodError } from 'zod';
export const validate = schema => (req, res, next) => {
  console.log(req);
  try {
    schema.safeParse({
      params: req.params,
      query: req.query,
      body: req.body,
    });
    console.log(req.next().value);
  } catch (error) {
    if (error instanceof ZodError) {
      return res.status(400).json({
        status: 'fail',
        errors: error.errors,
      });
    }
    next(error);
  }
};