javascript - Axios post intră în blocul catch chiar și după finalizarea cu succes a apelului Rest API


Cererea mea POST axios nu returnează valoarea returnată de API într-un scenariu 401 de eșec. Funcționează bine atunci când este un scenariu de succes.

API-ul meu de resetare a parolei returnează codul de stare și un mesaj pentru fiecare apel. Când folosesc Postman pentru a testa rezultatul său pentru resetarea unei parole, oferind parola curentă incorectă, primesc

Rezultat Postman:

 statusCode: 401,
            headers: {
               .......
               ........
            },
body: "{"code":"NotAuthorizedException","name":"NotAuthorizedException","message":"Incorrect username or password."}" <--- This is the body output

Dar în apelul meu axios post, ajunge în blocul catch:

await Axios.post(resetAPIUrl, resetParams, config).then(value=> {
                    console.log(`Returned data ----> ${JSON.stringify(value)}`);
                    resolve(value);
                }).catch(error=>{
                    console.log(`Failing--->${error}`)
                    reject(error)
                });

aceasta este eroarea pe care o primesc în blocul catch al postării Axios:

Error: Request failed with status code 401

Motivul erorii este corect. Dar de ce nu intră în blocul catch? Este o finalizare reușită a procesului. Apelarea API-ului direct din Postman îmi oferă structura corectă de ieșire.

Răspuns #1

Interceptorul a fost răspunsul. Deoarece Axios nu consideră nicio altă răspuns în afară de 200 ca scenariu de succes, interceptorii pot fi folosiți pentru a captura celelalte răspunsuri:

{     
                Axios.interceptors.request.use(req=>{
                   console.log(`This is the request ---> ${req.method} ${req.url}`)
                   return req;
                })
                Axios.interceptors.response.use(res => {
                    console.log(`res status ---> ${res.status}`)
                    resolve(res)
                    return res;
                }, (error)=>{
                    console.log(`This is the error status ---> ${error.response.status}`)
                    if(error.response.status === 401){
                       resolve(error.response);
                    }
                })
                await Axios.post(resetAPIUrl, resetParams, config);

Răspunsul #2

Dacă codul de răspuns arată 200, atunci în blocul tău .then ai o metodă sau o variabilă care nu este definită. Verifică asta!