Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Método PUT não está funcionando

Olá, meus amigos!

Preciso da ajuda de vocês! Ao executar o teste no Postman utilizando o PUT para substituir o titulo do livro me retorna as mensagens abaixo no Postman e no VSCode. Como posso resolver esta situação?

Código utilizado:

import express from "express";

const app = express();

app.use(express.json());

const livros = [
    {id: 1, "titulo": "Senhor dos Anéis"},
    {id: 2, "titulo": "O Robbit"}
]

app.get('/', (req, res) => {
    res.status(200).send('Curso de Node');
})

app.get('/livros', (req, res) => {
    res.status(200).json(livros)
})

app.post('/livros', (req, res) => {
    livros.push(req.body);
    res.status(201).send('O livro foi cadastrado com sucesso')
})

app.put('/livros/:id', (req, res) => {
    let index = buscaLivro(req.params.id);
    livros[index].titulo = req.body.titulo;
    res.json(livros)
})

function buscaLivro(id) {
    return livros.findIndex(livro => livro.id == id)
}

export default app

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas
solução!

Olá, Rogério! Tudo bem?

O erro aponta que não pode configurar uma propriedade undefined, que seria o campo "titulo". Acredito que o que ocorreu foi que você não fez um POST do livro com o id:3 e por isso ele não consegue modificar com o PUT algo que não foi criado.

Observei no seu código que falta também o GET com o id, vou deixar o código completo aqui para você consultar.

import express from "express";

const app = express();

app.use(express.json())

const livros = [
  {id: 1, "titulo": "Senhor dos Aneis"},
  {id: 2, "titulo": "O Hobiit"}
]

app.get('/', (req, res) => {
  res.status(200).send('Curso de Node');
}) 

app.get('/livros', (req, res) => {
  res.status(200).json(livros)
})

app.get('/livros/:id', (req, res) => {
  let index = buscaLivro(req.params.id);
  res.json(livros[index]);
})

app.post('/livros', (req, res) => {
  livros.push(req.body);
  res.status(201).send('Livro foi cadastrado com sucesso')
})

app.put('/livros/:id', (req, res) => {
  let index = buscaLivro(req.params.id);
  livros[index].titulo = req.body.titulo;
  res.json(livros);
})

app.delete('/livros/:id', (req, res) => {
  let {id} = req.params;
  let index = buscaLivro(id);
  livros.splice(index, 1);
  res.send(`Livro ${id} removido com sucesso`);
})


function buscaLivro(id) {
  return livros.findIndex(livro => livro.id == id)
}

export default app

Fico no aguardo.

Bons estudos!

Te agradeço pela força!

Deu tudo certo!

Que bom, Rogério!

Agora é foco nos estudos e qualquer coisa estamos por aqui!

Abraços!