我正在尝试通过 POSTMAN 测试 /login API(通过 FE 工作正常),但它没有 即使我正在发送身体数据,也会显示身体部位的任何内容。
但是当从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()
})
这个测试通过了......去你的吧伙计们......发生了什么事?
如果您正在使用 Express 服务器,请在路由之前初始化 Express 应用程序后立即尝试在服务器中解析您的正文
const app = express();
app.use(express.json());
正文的语法看起来像 JSON,但您已将正文的类型指定为“原始文本”。这会将您的请求的 Content-type 标头设置为“text/plain”,这可能会导致您的后端无法实际读取正文(因为它需要一个 JSON 对象)。
只需从“文本”切换到“JSON”,将当前正文括在大括号中(以便实际上发送带有数据属性集的单个 JSON 对象),然后尝试再次发送请求。这次内容类型标头将正确设置为“application/json”,您的后端将成功读取数据。
在Postman中的请求头配置中添加以下参数:
Content-Type: application/json
Content-Length
Content-Length的值是Postman在发送请求时自动计算的。这两个值都用于识别请求正文的媒体类型并准确解析它。当丢失时,正文可能会被完全忽略(取决于服务器)。
你应该使用
app.use(express.json());
执行此操作后尝试在控制台上记录身体数据
console.log(req.body);