Обработка ошибок в асинхронной маршрутизации в Express.js - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть экспресс-маршрутизация ниже, и это работает. Однако, если 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');
  }
});

1 Ответ

0 голосов
/ 25 апреля 2018

Проблема в вашем блоке перехвата, вы пытаетесь проанализировать круговой объект 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
    }
});
...