ExpressJs请求主体为空

时间:2018-11-08 18:44:43

标签: node.js express cors fetch

我在localhost:5000有一个Express应用,在localhost:3000有一个React应用。

我通过以下方式致电

            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 :(得分:2)

根据the documentationbody选项应该是几种特定类型之一,Object不应是其中一种。

尝试使用JSON字符串:

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

编辑:由于您使用的是no-cors,因此无法设置Content-Type application/json。相反,您需要生成一个URL编码的字符串并将Content-Type设置为application/x-www-form-urlencoded(因为no-cors仅适用于“简单标头”,如here所述)