簡體   English   中英

使用 axios 的 NodeJS 可重用 HTTP 請求

[英]NodeJS reusable HTTP requests using axios

我必須在我的應用程序中進行大量 API 調用。 我有大約 8 萬億次 Axios 調用。

所以我決定為 axious 制作一個輔助函數,並在每次我想做 HTTP Request 時將 URL 傳遞給它。

但我收到一個錯誤,這是我的文件:

apiUtils.js:

const axios = require("axios")
const handleError = require('./apiHandleError')
const SERVER_DOMAIN = process.env.HOST;
const AuthorizationHeader = process.env.AUTH
const getHeaders = () => {
    return {
        headers: {
            'Authorization': AuthorizationHeader
        },
    };
};
// HTTP GET Request - Returns Resolved or Rejected Promise
const getRequest = (url) => {
    return new Promise((resolve, reject) => {
        axios.get(`${SERVER_DOMAIN}${url}`, getHeaders())
            .then(response => {
                resolve(response)
            })
            .catch(error => {
                reject(handleError(error))
            });
    });
};
module.exports = getRequest

 //apihandleError.js - Common Error Handler Function
 const handleError = (error) => {
     let {
         status,
         message
     } = error.response;

     switch (status) {
         case 401:
             console.log(status)
             break;
             // do something when you're unauthenticated
         case 403:
             console.log(status)
             // do something when you're unauthorized to access a resource
             break;
         case 404:
             message = ({
                 status: `Couldn't reach Arena Gaming Server. Try again later`,
                 result: 404
             })
             // do something when the resource isnot found
             break;
         case 500:
             console.log(status)
             // do something when your server exploded
             break;
         default:
             // handle normal errors with some alert or whatever
     }
     return message; // I like to get my error message back
 }
 module.exports = handleError

這就是我調用函數的方式:

const userId = getRequest(`/api/reports/users/${userId}/general`)
  .then(data => {
    console.log(data);
    // do something with User #5
  })
  .catch(errorMessage => {
    console.log(errorMessage);
    // the error has already been handled by handleError
    // the message get's passed here
    // do something like store it in redux, etc.
  });

我收到 errorMessage 結果是: status: `Couldn't reach Arena Gaming Server. Try again later`, result: 404 status: `Couldn't reach Arena Gaming Server. Try again later`, result: 404

我認為您不需要包裝已經在另一個承諾中返回承諾的axios.get 你可以像這樣簡化這個

const axios = require("axios");
const handleError = require("./apiHandleError");
const SERVER_DOMAIN = process.env.HOST;
const AuthorizationHeader = process.env.AUTH;
const getHeaders = () => {
  return {
    headers: {
      Authorization: AuthorizationHeader
    }
  };
};
// HTTP GET Request - Returns Resolved or Rejected Promise
const getRequest = async url => {
  try {
    const response = await axios.get(`${SERVER_DOMAIN}${url}`, getHeaders());
    return response;
  } catch (err) {
    return handleError(err);
  }
};

用法可以是你正在使用的或者async/await

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM