【发布时间】:2022-01-03 18:53:07
【问题描述】:
我正在尝试通过将 Axios 库用于 http 请求,从我的 React 应用程序中的 Jira Rest API 获取数据。为了通过 Jira API 访问数据,需要 API 令牌。我在我的 Jira 帐户设置中生成了一个 API 令牌,但我不知道如何将它包含在我的 http 请求中以获得访问权限。
这是 Jira 文档提供的用于从 Jira 板获取问题的端点:
curl -u admin:admin http://localhost:8080/jira/rest/api/2/issue/TEST-10 | python -mjson.tool
这是用于将数据设置为获取的数据的 React 状态挂钩:
const [jiraTicket, setJiraTicket] = useState([]);
这是 API 请求的 fetch 函数(${} 将被用户输入填充):
function getJiraTicket() {
axios.get(`${username}:${apiToken}@Content-Type:application/json/https:/${jiraSiteName}.atlassian.net/rest/api/2/issue/${projectKey}-${ticketId}`)
.then((res) => {
const data = res.data;
setJiraTicket(data);
})
}
react 组件 return 内的按钮应该调用 fetch 函数:
return(
<Container>
<Button onClick{getJiraTicket()}>Fetch Jira Ticket</Button>
</Container>
);
这是我目前遇到的错误,因为授权没有按照我的方式工作 (我替换了本示例中提供的用户名、API 令牌等):
GET http://localhost:3000/username:apitoken@https:/sitename.atlassian.net/rest/api/2/issue/projectkey-ticketid 404(未找到)
编辑:
我目前的做法:
function getJiraTicket() {
axios.get(`${userName}:${apiToken}@https://${siteName}.atlassian.net/rest/api/2/issue/${projectId}-${ticketId}`,{
auth: {
username: userName,
password: apiToken,
},
withCredentials: true
})
.then((res) => {
const data = res.data;
console.log(data);
setJiraTicket(data);
})
.catch(err => {
// This error means: The request was made and the server responded with a status code
if(err.res) {
console.log(err.res.data);
console.log(err.res.status);
console.log(err.res.headers);
console.log("request was made and server responded with status");
// The request was made but no response was received
} else if (err.request) {
console.log(err.request);
console.log("request was made, but no response was received");
// Something happened in setting up the request that triggered an error
} else {
console.log("Error", err.message);
console.log("request is note set up correctly");
}
console.log(err.config);
})
当前错误,我根据 axios 文档定义:“请求已发出,但未收到响应”
在 Postman 中运行良好的端点(Postman 中提供了基本身份验证): https://sitename.atlassian.net/rest/api/2/issue/projectid-ticketid
【问题讨论】:
-
您收到的错误不是授权错误,而是 404(查看您尝试发送的 URL)
-
您正在尝试在 URL 中发送内容类型标头。 Axios 有它的own header methods
-
@Jamie_D 我去看看,谢谢
-
您还缺少 https 目标中的第二个正斜杠。
-
从 URL 中删除
withCredentials和凭据,即axios.get(`https://${siteName}.atlassian.net/rest/api/2/issue/${projectId}-${ticketId}`, { auth: { username: userName, password: apiToken } })。在onClick之后,您还缺少=
标签: reactjs api axios fetch jira