Axios将请求发布到ngrok服务器-为什么我在req.body中没有收到任何数据?

yiytaume  于 2023-10-18  发布在  iOS
关注(0)|答案(2)|浏览(174)

我正在向我的服务器发出一个axios post请求。客户端在localhost上运行。为了实现这一点,我使用了ngrok。我通过在axios请求中添加特定的头来解决CORS错误。但是,我在req. body上没有看到任何数据。我在看所有类似的职位,只是不明白为什么我不发送任何数据。任何帮助都将是非常感激的!!!
axios请求:

...
const posting = async () => {
      await axios.post('http://a410-xxx-c455-d1e8-1c8a-fa19.ngrok-free.app/someRequest',
            { title: 'world' }, {
            headers: {
                "Content-type": "application/x-www-form-urlencoded"
            }}
        );
    ...
}

index.js

const app = require ('./app');
app.use(bodyParser.json());

app.js

routes(app);

routes.js

app.use(router.post('/someRequest', (req, res, next) => {
   res.header("Access-Control-Allow-Origin", "*");
    console.log(req.body)
 }))
clj7thdc

clj7thdc1#

声称正在发送表单URL编码数据。

"Content-type": "application/x-www-form-urlencoded"

但是,您将对象传递给Axios,因此它将JSON编码数据。

{ title: 'world' }

而您拥有的唯一的正文解析中间件只支持JSON编码数据

app.use(bodyParser.json());

您需要:

  • 一个身体分析器
  • 的数据格式
  • 内容类型头

都吻合
由于您声称要发送URL编码数据,JSON解析器不会触发。
Axios会自动设置正确的Content-Type头,如果你不覆盖它。

省略headers属性。

mwkjh3gx

mwkjh3gx2#

这只是一个临时的解决方案,但如果它帮助任何人:我仍然不能解决它在服务器端,所以我现在添加一个标题在我的axios请求

const headers = {
     'Content-Type': 'text/plain'
 };

在服务器端,我添加到我的路由

bodyParser.text({type: '*/*'})

就像这样:

app.use(router.post('/someRequest', bodyParser.text({type: '*/*'}), (req, res, next) => {
   console.log(req.body)
}))

现在我得到的数据和没有cors错误.

相关问题