javascript - 将 jwt 添加到标头时出现 JSON.parse 错误
问题描述
从我的 react/redux 前端向我的 API 发送请求时遇到问题。API 端点在“api-key”标头中需要一个 jwt 令牌,但是,我SON.parse: unexpected character at line 1 column 1 of the JSON data
在尝试发送请求时收到 JSON.parse 错误。
我假设这是因为 JWT 的格式设置阻止了 JSON 被解析,但我无法理解它。谢谢。
创建后端时,我没有考虑这个问题,因此认为使用 JWT 作为 api 密钥就可以了。理想情况下,我想继续使用这个实现。
JWT 的一个例子:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVjMzMzNWJkZDY2NmM5MmYxMGQxMDU3MyIsInBlcm1pc3Npb25zIjowLCJ2IjowLCJpYXQiOjE1NDY4NTk5NjV9.WIL6vCO95BEV7DWbRMheAwIRRoYO3cQQbzPdIRVv4tI
获取请求:
export const getUserData = token => {
return async (dispatch, getState) => {
console.log(typeof token);
const response = await fetch("/api/user/data", {
method: "post",
headers: new Headers({
"Content-Type": "application/json",
"Accept": "application/json",
"api-key": token
})
});
const responseBody = await response.json();
console.log("Response JSON Body:", responseBody);
if (!response.ok) return dispatch({ type: AUTH_ERROR, payload: responseBody.message });
if (response.ok) return dispatch({ type: GET_USER_DATA, payload: responseBody });
};
};
解决方案
正如@kemicofa 在评论中所说,如果您的问题是JSON.parse
从那时起我们必须关注的是服务器响应,而不是您的服务器请求。
代码应该准备好接收来自服务器的错误响应并采取相应措施:
获取请求:
export const getUserData = token => {
return async (dispatch, getState) => {
console.log(typeof token);
const response = await fetch("/api/user/data", {
method: "post",
headers: new Headers({
"Content-Type": "application/json",
"Accept": "application/json",
"api-key": token
})
});
let responseBody;
try {
responseBody = await response.json();
} catch (e) {
responseBody = await response.text();
console.error('Server error response %s. json parse failed with error %s', responseBody, e.message)
return dispatch({ type: AUTH_ERROR, payload: responseBody });
}
console.log("Response JSON Body:", responseBody);
if (!response.ok) return dispatch({ type: AUTH_ERROR, payload: responseBody.message });
if (response.ok) return dispatch({ type: GET_USER_DATA, payload: responseBody });
};
};
推荐阅读
- go - 如何检查套接字是否正在侦听
- java - 如何检查 ImageView 是否从 URL 加载了图片图像
- angular - 找不到有关双向绑定的酷 Angular 功能的文档
- reactjs - 如何使用下拉列表中的 selectedValue 来调用 API 并呈现 JSON?
- here-api - 添加默认地图事件会引发错误“需要地图实例”
- hololens - 如何检测您的混合现实应用程序是在 HoloLens 1、HoloLens 2 还是沉浸式耳机上运行?
- c# - 从依赖属性生成自定义项控件作为 UserControl 中的项源
- google-chrome - 用于计算源文档哈希的 Google Chrome 扩展程序
- linux - 使用 mono 命令在 Linux 操作系统中运行 WinCE exe
- blockchain - 如何使用 bigchaindb 配置私有区块链。有可能吗?