POSTMAN 未在 POST 请求中的 body 中发送任何内容

POSTMAN not sending anything in the body in POST requests

我正在尝试通过 POSTMAN 测试 /login API(通过 FE 它工作正常)但它没有 在 body 部分显示任何内容,即使我正在发送 body 数据。

但是打印来自BE的请求时,body是空的...

  ....
  body: {},
  ....

与使用 FE 时不同:

  ....
  body: {data: { username: 'admin', password: 'admin' }},
  ....

知道发生了什么事吗?如果需要提供任何其他信息 - 请告诉我

我知道它正在通过,因为服务器响应 500 和消息

TypeError: Cannot read property 'username' of undefined

奇怪的是,我发送的数据在请求 object 中根本找不到 :(

编辑:

这是我在 FE 中的称呼:

return axios.post('login', { data: user })

并且用户是:

user: {
  username: 'admin',
  password: 'admin'
}

所以格式应该是对的

data: { 
    username: 'admin', 
    password: 'admin'
}

因为这就是我在 BE 端访问它的方式

req.body.data.username

编辑 2:

ultra-super-rare-weird 部分是,JEST 工作正常:)

const creds = {
      data: {
            username: 'admin',
            password: 'admin'
            }
    }

    return request(app)
      .post("/api/v1/login")
      .send(creds)
      .expect(200)
      .then(res => {
        expect(res.body).toMatchSnapshot()
      })

并且这个测试通过了.... f**k me 伙计们.. 发生了什么事?

body 的语法看起来像 JSON,但您已将 body 的类型指定为“原始文本”。这会将您请求的 Content-type header 设置为“text/plain”,这可能会导致您的后端无法实际读取 body(因为它需要一个 JSON object).

只需从“文本”切换到“JSON”,将当前的 body 括在花括号中(这样您实际上发送的是单个 JSON object 并设置了数据 属性)并再次尝试发送请求。这次 content-type header 将正确设置为“application/json”,您的后端将成功读取数据。

如果您使用的是 Express 服务器,请尝试在路由前初始化 Express 应用程序后立即在服务器中解析您的 body

const app = express();
app.use(express.json());

在Postman的请求头配置中添加如下参数:

 Content-Type: application/json
 Content-Length

Content-Length的值是Postman在发送请求时自动计算的。这两个值都用于识别请求主体的媒体类型并准确解析它。丢失时,正文可能会被完全忽略(取决于服务器)。