Отправка и получение данных из node.js? - PullRequest
0 голосов
/ 30 октября 2019

В своем коде 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;

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Для задачи 1,

Пожалуйста, попробуйте добавить это.

app.use (bodyParser.json ());

1 голос
/ 30 октября 2019

Убедитесь, что в конфигурации вашего сервера отсутствует код ниже конфигурации.

const bodyParser = require("body-parser");

app.use(bodyParser.json({ limit: "50mb" }));
app.use(bodyParser.urlencoded({ extended: false }));

body parser позволяет вам получить доступ к req.body из ваших маршрутов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...