无法访问 res.statusMessage in Javascript async/await try/catch 客户端代码以读取从 express 后端抛出的异常

Can't access res.statusMessage in Javascript async/await try/catch client code to read exception thrown from express backend

Chrome 可以读取服务器提供的消息 (No project found for 70100) 但是当我 console.log(err.message) 我只得到 Request failed with status code 400

客户代码:

const doFetch = async () => {
      try {
          const {data} = await axios.post('/docs/query/project', {projectId: '70100'});
          console.log(data);
          setFetched(data);

      } catch (err) {
        console.log(err.message);
      }
    }

服务器代码:

try {
        const docs = await docsDb.getProject(projectId);
        res.json(docs);
    } catch(err) {
        res.statusMessage = `No project found for ${projectId}`;
        res.status(400).end();
    }

Chrome 可以阅读我的消息,但我不知道如何向用户显示它,这很烦人。显然,该消息已到达浏览器,我将不胜感激有关如何在我的客户端代码中访问它的一些提示!提前致谢。

客户端上的

err.response.statusText 包含服务器上 res.statusMessage 中设置的文本。

生活和学习

在 Axios 响应的节点响应表面中发送的 statusMessage 作为 statusText 属性。您可以通过查看 Axios 错误的 err.response 属性 来查看与失败请求关联的响应对象。不过要小心;如果因为错误与连接失败等问题有关而没有发出 HTTP 请求,err.response 将不存在。

const doFetch = async () => {
  try {
    const {data} = await axios.post('/docs/query/project', {projectId: '70100'});
    setFetched(data);
  } catch (err) {
    const message = err.response
      ? `Request failed with ${err.response.status}: ${err.response.statusText}`
      : err.message;
    console.error(message);
  }
}