简体   繁体   English

使用 axios 的 NodeJS 可重用 HTTP 请求

[英]NodeJS reusable HTTP requests using axios

I have to make tons of API calls in my app.我必须在我的应用程序中进行大量 API 调用。 I have like 8 trillion Axios calls.我有大约 8 万亿次 Axios 调用。

So I decided to make a helper function for axious and pass the URL to it every time I want to do HTTP Request .所以我决定为 axious 制作一个辅助函数,并在每次我想做 HTTP Request 时将 URL 传递给它。

But I get an error here are my files:但我收到一个错误,这是我的文件:

apiUtils.js: 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

And this is how I call the function:这就是我调用函数的方式:

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.
  });

I get errorMessage result is : status: `Couldn't reach Arena Gaming Server. Try again later`, result: 404我收到 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

I don't think you need to wrap the axios.get which already returns a promise in another promise.我认为您不需要包装已经在另一个承诺中返回承诺的axios.get you could simplify this like this你可以像这样简化这个

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);
  }
};

Usage can be as you are using or async/await用法可以是你正在使用的或者async/await

Hope this helps希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM