Тело запроса ExpressJs пусто - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть экспресс-приложение на localhost:5000 и приложение реакции на localhost:3000.

Я звоню через

            fetch(`${backendUrl}/charge`, {
                method: "POST",
                mode: "no-cors",
                headers: {
                    "Content-Type": "application/json"
                },
                body: {
                    stripeToken: token,
                    chargeAmount: this.state.donationAmount
                }
            })

И отвечает

function route(req, res) {
  console.log(req.body);
}

Сервер должен быть правильно настроен для работы с CORS, но тело все еще пусто.

//configure env variables
require("dotenv").config();

//import packages
var express = require("express");
var bodyParser = require("body-parser");
var cors = require("cors");

//import route functions
const StripeRoute = require("./StripeRoute");

//setup app
const app = express();
const port = process.env.PORT || 5000;

//setup bodyparser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

//Setup CORS
app.use(cors());
app.options("*", cors()); // include before other routes

//Connect functions to API routes
app.post("/charge", StripeRoute);

module.exports = app;

1 Ответ

0 голосов
/ 08 ноября 2018

В соответствии с документацией , опция body должна относиться к одному из нескольких определенных типов, Object не является одним из них.

Попробуйте использовать строку JSON:

body: JSON.stringify({
  stripeToken: token,
  chargeAmount: this.state.donationAmount
})

EDIT : поскольку вы используете no-cors, вы не можете установить Content-Type application/json. Вместо этого вам нужно сгенерировать строку в кодировке URL и установить Content-Type в application/x-www-form-urlencoded (поскольку no-cors будет работать только с использованием «простых заголовков», как объяснено здесь и далее).

...