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

问题描述 投票:0回答:4

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

enter image description here

但是当从BE打印请求时,正文是空的......

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

与使用 FE 时不同:

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

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

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

TypeError: Cannot read property 'username' of undefined

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

编辑:

这就是我在 FE 中的称呼:

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

用户是:

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

所以格式应该是正确的

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

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

req.body.data.username

编辑2:

超级超级罕见的奇怪部分是,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()
      })

这个测试通过了......去你的吧伙计们......发生了什么事?

postman http-post
4个回答
13
投票

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

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

12
投票

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

只需从“文本”切换到“JSON”,将当前正文括在大括号中(以便实际上发送带有数据属性集的单个 JSON 对象),然后尝试再次发送请求。这次内容类型标头将正确设置为“application/json”,您的后端将成功读取数据。


6
投票

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

 Content-Type: application/json
 Content-Length

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


0
投票

你应该使用

app.use(express.json());

执行此操作后尝试在控制台上记录身体数据

console.log(req.body);
© www.soinside.com 2019 - 2024. All rights reserved.