Node.js express4空JSON查询

Node.js express4空JSON查询,node.js,express,Node.js,Express,我使用ReactJS作为前端,Nodejs(Express)作为API。我似乎无法获取Nodejs中react服务发送的请求的JSON值。我能够呼叫POST路线,甚至收到回复,但请求正文似乎是空的。以下是我在React中使用的Fetch函数: static Post(url, bodyArgs){ return new Promise((resolve, reject) => { fetch(apiUrl+url, { method: 'POST', mode: "no

我使用ReactJS作为前端,Nodejs(Express)作为API。我似乎无法获取Nodejs中react服务发送的请求的JSON值。我能够呼叫POST路线,甚至收到回复,但请求正文似乎是空的。以下是我在React中使用的Fetch函数:

static Post(url, bodyArgs){
return new Promise((resolve, reject) => {
  fetch(apiUrl+url, {
    method: 'POST',
    mode: "no-cors",
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(bodyArgs),
      //{eventID: 1}
  })
  .then((res) => res.json())
  .then((resJson) => {
    //console.log(resJson);
    return resJson;
  })
  .catch((err) => {
    //console.error(err);
    return err;
  });
});
}

这是我在路线上使用的代码(accounts.js):

为什么它不起作用?是不是因为我还必须在路由器文件中包含Json中间件


编辑:我正在使用Express@4.16.3我想你错过了。 添加
app.use(express.bodyParser())在你的app.js中
对于较新版本的express>4,请尝试

var bodyParser = require('body-parser')
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

我发现了问题,是因为CORS。我将我的
fetch()
CORS参数设置为no CORS,这意味着浏览器不能再执行诸如JSON或任何其他自定义头之类的高级请求。要解决此问题,只需执行以下操作:

从提取函数中删除此参数:

mode: "no-cors"
然后在您的Express应用程序上添加以下代码:

// CORS enable
app.all('/*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

既然您的API服务器接受了CORS,那么一切都应该可以正常工作。

“req.body似乎是空的”您能更具体一点吗?好的,当我尝试读取我发送的值时,里面没有值。它只是一个空数组,这意味着JSON实际上没有被解析。因此
JSON.stringify(req.body)
返回一个字符串,其中包含
[]
console.log(JSON.stringify(req.body))
返回
{}
我正在使用Express4.16.3,这使得bodyParser不受欢迎。您可以在我前面包含的新方法express.json()的最后一个代码段中看到,它是ExpressBody解析器的一部分。现在您必须分别安装和导入它。i、 e.npm安装body parser——saveexpress.json()和bodyParser几乎是同一个模块,至少文档是这么说的。让我们来看看。
mode: "no-cors"
// CORS enable
app.all('/*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});