Метод post возвращает пустой объект

Ни один другой пост в Stackoverflow не смог решить мой вопрос, так что приступим.

У меня есть приложение React / redux. Я делаю запрос на выборку с помощью действия:

export const postNewBase = () => title => {
  fetch(`${API_BASE_URL}/addbase`, {
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    },
    body: JSON.stringify({
        title: title
    })
  })
    .then(res => {
        return res.json();
    })
    .catch(error => {
        console.log("Request failed", error);
    });
  };

Компонент называет это:

onSubmit(event) {
    event.preventDefault();
    const title = this.textInput.value.trim();
    this.props.dispatch(postNewBase(title));
}

В базовой форме API моего узла выглядит так:

app.post("/addbase", (req, res) => {
  console.log(req.body);
  res.status(200).send(req.body);
});

Req.body возвращает undefined, а req не содержит ничего, соответствующего title, предоставленному функциями. Что не так с моей разметкой?

API_BASE_URL - другое происхождение? Если да, включен ли в вашем API CORS?

Tholle 10.08.2018 16:39

@Tholle API_BASE_URL - это localhost, а CORS включен и отправляется на бэкэнд через заголовки

HJW 10.08.2018 16:41

Вы пользуетесь парсером тела? (например, Вот этот?)

apokryfos 10.08.2018 16:42

@apokryfos const bodyParser = require("body-parser") находится в server.js и app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true }));

HJW 10.08.2018 17:07

Что вы видите во вкладке разработчика "Сеть" браузера? Как конкретно выглядят заголовки и тело ответа?

Pointy 10.08.2018 18:49

@Pointy Журнал консоли на клиентском компоненте возвращает заголовок штрафа. В журнале консоли в отправленном действии указано dispatch() { return _dispatch.apply(undefined, arguments); }. И req.body в журнале на стороне сервера говорит {}

HJW 10.08.2018 19:03
0
6
280
1

Ответы 1

Возможно, вы не разрешаете тела в кодировке JSON для вашего приложения узла.

import express from 'express';
import bodyParser from 'body-parser';

// Server app.
const app = express();

// To support JSON-encoded bodies.
app.use(bodyParser.json());

см. комментарий выше

HJW 10.08.2018 17:07

Другие вопросы по теме