Por algum motivo minha rota do protocolo PUT não está rodando e quando eu faço uma requisição no Postman, aparece a mensagem do schema (estou usando Joi para a validação do corpo de requisição) do protocolo POST, MESMO SE EU TROCAR O CONTEÚDO DA MENSAGEM!
Este é o meu arquivo server.ts com minhas rotas:
import express from "express";
import { tutorsData } from "./data/tutors/tutors.js";
import { validatePostTutor } from "./middlewares/validateTutor/validatePostTutor.js";
import { validatePutTutor } from "./middlewares/validateTutor/validatePutTutor.js";
export let tutors = [...tutorsData];
export const httpDogs = {
notFound: `<img style='max-width: 500px; width: 300px; margin: 0 auto; display: inherit;' src='https://http.dog/static/codes/dogs/large/404.avif' alt='404 - Not Found :[' />`,
badRequest: `<img style='max-width: 500px; width: 300px; margin: 0 auto; display: inherit;' src='https://http.dog/static/codes/dogs/large/400.avif' alt='400 - Bad Request :[' />`,
};
export const showData = (
status: boolean,
data: Object | Array<Object> | string | undefined
) => ({
success: status,
[typeof data === "object" ? "data" : "message"]: data,
});
const app = express();
app.use(express.json());
app.post("/tutor", validatePostTutor, (req, res) => {
const tutor = req.body;
if (!tutor)
return res
.status(400)
.setHeader("Content-type", "text/html")
.send(httpDogs.badRequest);
tutors.unshift(tutor);
res.status(200).json(showData(true, tutors));
});
app.put("/tutor/:id", validatePutTutor, (req, res) => {
const { updatedTutor } = res.locals;
res.status(200).json(showData(true, updatedTutor));
});
app.delete("/tutor/:id", (req, res) => {
const { id } = req.params;
const goneTutor = tutors.find((tutor) => tutor.id === Number(id));
if (!goneTutor) {
return res
.status(404)
.setHeader("Content-type", "text/html")
.send(httpDogs.notFound);
}
const updatedTutors = tutors.filter(
(tutor) => tutor.id !== Number(req.params.id)
);
tutors = updatedTutors;
res.status(200).send(showData(true, tutors));
});
app.get("/tutors", (req, res) => res.status(200).json(showData(true, tutors)));
app.post("/pet/:tutorId", (req, res) => {
const { tutorId } = req.params;
const pet = req.body;
const selectedTutor = tutors.find((tutor) => tutor.id === Number(tutorId));
if (!selectedTutor)
return res
.status(404)
.setHeader("Content-type", "text/html")
.send(httpDogs.notFound);
selectedTutor?.pets.unshift(pet);
res.status(200).json(showData(true, selectedTutor?.pets));
});
app.get("*", (req, res) =>
res
.status(404)
.setHeader("Content-type", "text/html")
.send(httpDogs.notFound)
);
let PORT: number;
app.listen((PORT = 3000), () =>
console.log(`Server running on localhost:${PORT}...`)
);
Este é o middleware validadePostTutor:
import { Request, Response, NextFunction } from "express";
import { httpDogs, tutors } from "../../server";
import { postTutorSchema } from "./schemas";
export const validatePostTutor = (
req: Request,
res: Response,
next: NextFunction
) => {
const tutor = req.body;
const isEmpty = Object.entries(tutor).length === 0;
const { id } = req.params;
const { error } = postTutorSchema.validate(tutor);
let selectedTutor = tutors.find((tutor) => tutor.id === Number(id));
if (!isEmpty && error)
return res
.status(400)
.json({ success: false, error: error.details[0].message });
else if (isEmpty) return res.status(400).send(httpDogs.badRequest);
res.locals.selectedTutor = selectedTutor;
next();
};
Este problema está me impedindo de entregar o trabalho do meu estágio. Se alguém puder me ajudar eu agradeço muito. Me avisem se precisarem de mais informações.