express.js中的异步路由中的错误处理



我在下面有明确的路由,并且有效。Hovewer,如果Axios由于错误而无法检索任何信息,我将无法通过Res.Send响应。但是我可以看到终端中的错误日志。如何捕获错误?理想情况下,如果无法检索数据,它应该响应"无法连接"。

router.get('/accounts', async (req, res) => {
  try {
    const response = await axios.get(`${config.url}/accounts`, {
      auth: config.auth
    });
    const data = await response.data.results;
    res.json(data);
  } catch (e) {
    console.log(e);
    res.send('Could not connect');
  }
});

问题在您的捕获块中,您正在尝试解析圆形JSON对象。我建议使用JSON-Stringify-Safe库解决您的问题:

安装JSON-Stringify-Safe:

    $ npm install json-stringify-safe --save

解决方案:

const express = require('express')
const axios = require('axios');
const app = express();
var stringify = require('json-stringify-safe');

app.get('/accounts', async (req, res) => {
    try {
        const response = await axios.get('someInvalidUrl'); // will throw error
        return res.json(response);
    } catch (e) {
        e = JSON.parse(stringify(e)); // safely parse circular JSON object
        res.send(e); // will return error as json
    }
});

最新更新