В своем коде React я отправляю запрос 'post' и 'get'. Я думаю, что мои проблемы заключаются в коде на стороне сервера.
General
const express = require('express');
const app = express();
const cors = require('cors');
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors());
const posts = [
{
"postId": 1,
"id": 1,
"title": "To be or not to be",
"body": "Yes, that is the question"
},
{
"postId": 1,
"id": 2,
"title": "So What?",
"body": "What do you want"
}
];
Примечание. Контекст, приведенный выше код предшествует коду проблемы
Решено 1) Сообщение
Пользователь нажимает «Отправить», запрос на отправку отправляет данные на сервер
Проблема:
1) 'req.body' пусто
fetch("http://localhost:3001/create", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(post)
})
.then(res => this.props.history.push('/posts'))
.catch(err => this.setState({error: true}))
this.setState({
title: "",
body: ""
})
app.post('/create', (req, res, next)=>{
// Request body is empty, why?
console.log(req.body);
})
Решение:
POST-запрос отправляет данные в формате JSON, потому чтоиз JSON.stringify(post)
, нам нужно проанализировать эти данные JSON, чтобы мы могли использовать app.use(bodyParser.json());
, и там у нас это есть. Решено
решено 2) Get
В первом запросе get я посылаю 'id' объекта в виде параметров URL и пытаюсь получить соответствующий объект изсервер, запрос отправлен правильно.
Проблема: Получите следующую ошибку в функции 'findPostById':
TypeError: Невозможно прочитать идентификатор свойства неопределенного
fetch(`http://localhost:3001/posts/${this.props.match.params.id}`)
.then(res=>res.json())
.then(data=>this.setState({loadedPost: data}))
.catch(err=>console.log(err))
app.get('/posts/:id', (req, res, next)=>{
// Correct, receive id
let id = req.params.id;
findPostById(id, (post, err)=>{
if(err){
console.log(err);
}
else{
res.send(post)
}
})
})
let findPostById = (id, cb)=>{
console.log(id, 'Correctly receive the id');
let post = posts.find((post)=>{
return post.id === id;
})
// Receive: 'TypeError: Cannot read property id of undefined'
console.log(post.id);
if(post){
cb(post, null);
}
else{
cb(null, new Error('Could not find post', id));
}
}
Решение:
post.id
- это тип 'число', а идентификатор имеет тип 'строка', возвращение post.id === id;
приводит к значению false из-за строгого равенства. Итак, мы конвертируем id в число с помощью +id
`return post.id === + id;