При отправке 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 'name')<br>
at D:\Web-programmist\JS\Практика\fullstackopen_backend\index.js:57:16<br> at Layer.handle [as handle_request] (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\layer.js:95:5)<br> at next (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\route.js:144:13)<br> at Route.dispatch (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\route.js:114:3)<br> at Layer.handle [as handle_request] (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\layer.js:95:5)<br> at D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\index.js:284:15<br> at Function.process_params (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\index.js:346:12)<br> at next (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\router\index.js:280:10)<br> at expressInit (D:\Web-programmist\JS\Практика\fullstackopen_backend\node_modules\express\lib\middleware\init.js:40:5)<br> 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}`)