Axios не возвращает ошибку в веб-интерфейсе - PullRequest
0 голосов
/ 24 октября 2018

Я использую Axios для использования API на моем бэкэнде с NODEJS + EXPRESS ...

После этого я использую Axios в своем внешний интерфейс с ES6 + JAVASCRIPT, ОРИЕНТИРОВАННЫЙ НА ОБЪЕКТЫ ...

Что произойдет, если я получу через свой бэкэнд в маршруте API, он возвращает мне ошибкукогда он должен вернуться, и возвращает мне дату, когда он должен вернуться ...

Но в моем внешнем интерфейсе , axios catch не работает потому что это возвращает меня внутри моей ошибки даты и не меняет status и statusText .

Я хотел бы знать, почему это происходит, и исправить на моем backend в атрибут "date" it возвращает мне результат, если нет ошибки , и , если есть ошибка, он изменяет атрибуты "status" и "statusText"ответа Axios на улов на фронтенде будет работать ..

КОД КОНТРОЛЛЕРА БАКЕНДА (NODEJS CONSUMEAPI):

module.exports.consume = (app, req, res) => {
    // PARAMS && QUERYS
    const xsjs        = req.params.urn;
    const shoppingId  = req.query.Shop,
          periodOf    = req.query.PeriodOf,
          periodUntil = req.query.PeriodUntil,
          kpi         = req.query.Kpi,
          select      = req.query.Select;

    // API_DAO.JS (CLASS)
    const apiDAO = new app.models.apiDAO(xsjs, shoppingId, periodOf, periodUntil, kpi, select);
          apiDAO.getResponseAxios().then  ( response => res.json(response.data) )
                                   .catch ( error    => res.json({ ErrorStatus: error.response.status, ErrorText: error.response.statusText }) );
}

AXIOS В МОЕМ FRONTEND

class Api {
    constructor(xsjs, shoppingId, periodOf, periodUntil, kpi, select){
        this.xsjs        = xsjs;
        this.shoppingId  = shoppingId;
        this.periodOf    = periodOf;
        this.periodUntil = periodUntil;
        this.kpi         = kpi;
        this.select      = select;
    }

    configAxios(){
        return axios.create({
            baseURL:             'http://localhost:3000/api/',
            method:              'GET',
            responseType:        'json',
            responseEncoding:    'utf8',
            headers: {
                'Content-Type':  "application/json",
                'Cache-Control': "no-cache",
            },
            params: {  
                Shop:       this.shoppingId,
                PeriodoDe:  this.periodOf,
                PeriodoAte: this.periodUntil,
                Kpi:        this.kpi,
                Select:     this.select
            }
        });
    }

    async consume(){ return await this.configAxios().get(`/${this.xsjs}?`); }
}

Ответ об ошибках Axios на внешнем интерфейсе

Обратите внимание, что он вставляет в атрибут даты ошибки и не изменяет статус или statusText из атрибута даты.(Это должно быть неправильно, поскольку в запросе API на моем бэкэнде произошла ошибка)

img1 Axios Response при правильном выполнении с параметрами и запросом

img2

1 Ответ

0 голосов
/ 25 октября 2018

Проблема внутри .catch обратного вызова.Произошла ошибка на стороне вашего бэкенда, но после ее перехвата вы отправляете обычный ответ JSON с кодом состояния 200 по умолчанию:

.catch(error => res.json({ ErrorStatus: error.response.status, ErrorText: error.response.statusText }) );

Если вы хотите, чтобы ваш бэкэнд отвечал с ошибкой HTTP, вам нужно установить HTTPКод статуса по-другому:

.catch(error => res.status(error.response.status).send(error.response.statusText);
...