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);
});