【问题标题】:Axios post sending body but body is undefined with fetch and PostmanAxios 发布发送正文,但正文未使用 fetch 和 Postman 定义
【发布时间】:2021-02-11 23:27:21
【问题描述】:

我无法使用 fetch 或 Postman 发送帖子正文,但我可以使用 Axios 发送正文。

Axios 返回:User name = Fred, password is Flintstone

但是 Postman 和 fetch 都返回 User name = undefined, password is undefined

如何使用 fetch 和 postman 获取帖子正文?

服务器文件

const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const axios = require("axios");

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.post("/login", (req, res) => {
  var user_name = req.body.user;
  var password = req.body.password;
  console.log("User name = " + user_name + ", password is " + password);
  res.end("yes");
});

app.listen(3000, () => {
  console.log("Started on PORT 3000");
});

Axios

axios.post("http://localhost:3000/login", {
  user: "Fred",
  password: "Flintstone",
});

获取(客户端)

fetch("http://localhost:3000/login", {
  method: "POST",
  body: JSON.stringify({ user: "Fred", password: "Flintstone" }),
  mode: "no-cors",
});

邮递员

【问题讨论】:

    标签: javascript node.js axios fetch postman


    【解决方案1】:

    fetch 不默认发布 JSON,这就是您必须显式编码正文的原因。您还需要告诉服务器您正在发送 JSON。

    未经 CORS 许可,您不能这样做,因此您不得将模式设置为 no-cors

    const headers = new Headers();
    headers.append("Content-Type", "application/json");
    
    fetch("http://localhost:3000/login", {
      method: "POST",
      body: JSON.stringify({ user: "Fred", password: "Flintstone" }),
      headers
    });
    

    Postman 的问题大概是一样的(但在 UI 截图中看不到):需要设置 Content-Type 标头。

    【讨论】:

    • 谢谢。这与安装 cors: npm i cors 并添加 const cors = require("cors"); app.use(cors()); 到服务器文件相结合。
    【解决方案2】:

    在 Postman 中,您尝试将 JSON 数据作为文本发送。在 Postman 中将发送的数据类型从 Text(您现在拥有的)更改为 JSON

    另外作为建议,您应该在您的 server 文件中保留 1 个 bodyParser

    对于fetch()这个问题推荐你看看,一定要调整一下Fetch: POST json data

    【讨论】:

    • 感谢这解决了我的邮递员问题。是的,我不确定 bodyparser,谢谢。
    • 没问题,也可以尝试使用constlet 而不是var :)
    【解决方案3】:

    试试这个:

    app.post("/login", (req, res) => {
      var user_name = req.body.user;
      var password = req.body.password;
      console.log("User name = " + user_name + ", password is " + password);
      res.json({ "user name": user_name, "password": password });
    });
    

    【讨论】:

    • 仍然遇到同样的问题,而且它也没有在响应中发回。
    猜你喜欢
    • 2017-09-07
    • 2018-06-28
    • 1970-01-01
    • 2020-11-10
    • 2020-02-03
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多