Proxy API 通过 Express return pending Promise 请求而不是响应
Proxy API request through Express return pending Promise instead of response
我目前正在尝试使用 Atlassian Jira rest API。为了不出现 CORS 错误,我采用了推荐的路线,即不从浏览器发送请求,而是通过我的快速服务器代理它。
现在,当我这样做时,我在应用程序中收到的只是一个未决的承诺。我假设我有一次没有正确解决它,但我不知道在哪里。
API 向代理发送请求的处理程序:
const baseURL = `${apiConfig}/jiraproxy`;
export const testConnection = integration => {
return fetch(`${baseURL}/get`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(integration)
})
.then(handleResponse)
.catch(handleError);
};
Express 服务器上的 Jira 代理端点
const baseURL = `rest/api/3/dashboard`;
router.post("/get", (req, res) => {
fetch(req.body.link + baseURL, {
method: "GET",
headers: { Accept: "application/json" },
auth: {
username: req.body.credentials.username,
password: req.body.credentials.token
}
})
.then(handleResponse)
.catch(handleError);
});
handleResponse 和处理错误方法:
async function handleResponse(response) {
if (response.ok) {
return response.json();
}
if (response.status === 400) {
const error = await response.text();
throw new Error(error);
}
throw new Error("Network response was not ok.");
}
function handleError(error) {
// eslint-disable-next-line no-console
console.error(`API call failed. ${error}`);
throw error;
}
目标:
将向代理发送请求的请求和 return 代理的响应作为初始 "testConction" 方法的 return。
错误:
没有抛出任何错误,但浏览器中收到的响应是一个未决的承诺。
更改为 Jira 代理路由器修复了它。感谢@jfriend00.
router.post("/get", (req, res) => {
return fetch(req.body.link + baseURL, {
method: "GET",
headers: { Accept: "application/json" },
auth: {
username: req.body.credentials.username,
password: req.body.credentials.token
}
})
// This is the part that changed
.then(response => handleResponse(response))
.then(jiraResponse => res.status(200).json(jiraResponse))
.catch(handleError);
});
我目前正在尝试使用 Atlassian Jira rest API。为了不出现 CORS 错误,我采用了推荐的路线,即不从浏览器发送请求,而是通过我的快速服务器代理它。
现在,当我这样做时,我在应用程序中收到的只是一个未决的承诺。我假设我有一次没有正确解决它,但我不知道在哪里。
API 向代理发送请求的处理程序:
const baseURL = `${apiConfig}/jiraproxy`;
export const testConnection = integration => {
return fetch(`${baseURL}/get`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify(integration)
})
.then(handleResponse)
.catch(handleError);
};
Express 服务器上的 Jira 代理端点
const baseURL = `rest/api/3/dashboard`;
router.post("/get", (req, res) => {
fetch(req.body.link + baseURL, {
method: "GET",
headers: { Accept: "application/json" },
auth: {
username: req.body.credentials.username,
password: req.body.credentials.token
}
})
.then(handleResponse)
.catch(handleError);
});
handleResponse 和处理错误方法:
async function handleResponse(response) {
if (response.ok) {
return response.json();
}
if (response.status === 400) {
const error = await response.text();
throw new Error(error);
}
throw new Error("Network response was not ok.");
}
function handleError(error) {
// eslint-disable-next-line no-console
console.error(`API call failed. ${error}`);
throw error;
}
目标: 将向代理发送请求的请求和 return 代理的响应作为初始 "testConction" 方法的 return。
错误: 没有抛出任何错误,但浏览器中收到的响应是一个未决的承诺。
更改为 Jira 代理路由器修复了它。感谢@jfriend00.
router.post("/get", (req, res) => {
return fetch(req.body.link + baseURL, {
method: "GET",
headers: { Accept: "application/json" },
auth: {
username: req.body.credentials.username,
password: req.body.credentials.token
}
})
// This is the part that changed
.then(response => handleResponse(response))
.then(jiraResponse => res.status(200).json(jiraResponse))
.catch(handleError);
});