При отправке POST запроса он превращается в GET и меняется тип с json на html

Добавляю контакт в телефонную книгу. Если отправляю POST с помощью плагина VSC REST-Client:

POST http://localhost:3001/api/persons
content-type: application/json

{
   "name":"Mary_S",
   "number":"12345"
}

возвращается :

HTTP/1.1 500 Internal Server Error
X-Powered-By: Express
Content-Security-Policy: default-src 'none'
X-Content-Type-Options: nosniff
Content-Type: text/html; charset=utf-8
Content-Length: 1625
Date: Tue, 09 Jan 2024 12:49:45 GMT
Connection: close

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>TypeError: Cannot read properties of undefined (reading &#39;name&#39;)<br> &nbsp; 
&nbsp;at D:\Web-programmist\JS\Практика\fullstackopen_backend\index.js:57:16<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\layer.js:95:5)<br> &nbsp; &nbsp;at next (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\route.js:144:13)<br> &nbsp; &nbsp;at Route.dispatch (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\route.js:114:3)<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\layer.js:95:5)<br> &nbsp; &nbsp;at D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\index.js:284:15<br> &nbsp; &nbsp;at Function.process_params (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\index.js:346:12)<br> &nbsp; &nbsp;at next (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\index.js:280:10)<br> &nbsp; &nbsp;at expressInit (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\middleware\init.js:40:5)<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\layer.js:95:5)</pre>

Когда отправляю POST запрос через POSTMAN, то он превращается в GET с результатом 500 Internal Server Error.

index.js:

const express = require('express')
const app = express()

let persons = [
    { 
        "id": 1,
        "name": "Arto Hellas", 
        "number": "040-123456"
      },
      { 
        "id": 2,
        "name": "Ada Lovelace", 
        "number": "39-44-5323523"
      },
      { 
        "id": 3,
        "name": "Dan Abramov", 
        "number": "12-43-234345"
      },
      { 
        "id": 4,
        "name": "Mary Poppendieck", 
        "number": "39-23-6423122"
      }
]
app.get('/', (request, response) => {
    response.send('<h1>Hello World!</h1>')
  })
app.get('/api/persons',(request,response)=> {
    response.json(persons)
})
app.get('/info', (request, response)=> {
    response.send(`<p>Phonebook has info for ${persons.length} people</p>
    <p>${Date()}</p>`)
})
app.get('/api/persons/:id', (request, response)=>{
  const id = Number(request.params.id)
  const person = persons.find(p=>p.id === id)
  if(person){
    response.json(person)
  }else{
    response.statusMessage = 'The requested person does not exist.'
    response.status(404).end()
  }
})
app.delete('/api/persons/:id', (request, response)=> {
  const id = Number(request.params.id)
  persons = persons.filter(p => p.id !== id)
  response.status(204).end()
})
const randomId = (max) =>{
  return Math.floor(Math.random(max))
}
app.post('/api/persons', (request, response) => {
  const body = request.body
  const person = {
    name: body.name,
    number: body.number,
    id: randomId(10000)
  }
  console.log(person)
  persons.concat(person)
  response.json(person)
})


const PORT = 3001
app.listen(PORT)
console.log(`Server running on port ${PORT}`)


Ответы (0 шт):