【问题标题】:Req.body is empty, expressReq.body 为空,表示
【发布时间】:2019-03-01 14:28:56
【问题描述】:

我正在尝试使用 express 制作一些客户端-服务器程序。但无论我尝试什么 req.body 总是空的。我已经搜索了解决方案,但在大多数情况下,主要问题是 'Content-Type' 或 app.use(bodyParser.json());缺失。两个我都有了,还是不行。

这是我的服务器端:

const express = require('express');
const app = express();
const port = 5000;

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

app.use(bodyParser.json());

app.post('/', (req, res) => {
    console.log(req.body);
    res.send(req.body);
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

这里是客户端:

const promise = fetch('http://127.0.0.1:5000', {
    mode: 'no-cors',
    credentials: 'include',
    headers: {
        'Content-Type': 'application/json; charset=UTF-8',
        'Accept' : 'text/plain;charset=UTF-8',
    },
    method: 'POST',
    body: JSON.stringify({x: 2, y:3}),
});

【问题讨论】:

  • “空”到底是什么意思?空对象?空值?不明确的?空字符串?空数组?
  • {} 被打印,当我期待像这样的“{x: 2, y:3}”

标签: javascript express


【解决方案1】:

问题在于模式:'no-cors'。您将无法设置 Accept 和 Context-Type 标头。

【讨论】:

  • 但是不使用它浏览器给我一个错误“对预检请求的响应没有通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'标头。来源' null' 因此不允许访问。如果不透明的响应满足您的需求,请将请求的模式设置为 'no-cors' 以获取禁用 CORS 的资源。"。
  • 如果您在不同的域中发出请求,而不是提供服务的 javascript,则需要发回 Access-Control-Allow-Origin 标头。如果您在 127.0.0.1 上打开浏览器并向该地址发出请求,则不需要 CORS 标头。如果您使用 localhost 查看页面,但将请求发送到 ip 地址,则会收到 CORS 错误。
  • 或者,使用 post 参数而不是 json 发送数据,这样您就不必更改内容类型。
  • 我明白了。我改变了,现在它可以工作了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2019-02-08
相关资源
最近更新 更多