Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用axios的NodeJS可重用HTTP请求_Javascript_Node.js_Express - Fatal编程技术网

Javascript 使用axios的NodeJS可重用HTTP请求

Javascript 使用axios的NodeJS可重用HTTP请求,javascript,node.js,express,Javascript,Node.js,Express,我必须在我的应用程序中进行大量API调用。我有8万亿个Axios电话 因此,我决定为axious创建一个助手函数,并在每次执行HTTP请求时将URL传递给它 但我得到一个错误这里是我的文件: apiUtils.js: const axios = require("axios") const handleError = require('./apiHandleError') const SERVER_DOMAIN = process.env.HOST; const AuthorizationHea

我必须在我的应用程序中进行大量API调用。我有8万亿个Axios电话

因此,我决定为axious创建一个助手函数,并在每次执行HTTP请求时将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.
  });
我收到的错误消息结果是:
状态:`无法访问竞技场游戏服务器。请稍后再试`,

结果: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


希望这对你有所帮助。

这到底是怎么回事……你为什么不
返回axios.get()
包装,而不是拆开并包装一个做同样事情的承诺呢?还有..验证你的环境变量是否都设置好了:)我不明白,你能举个例子吗?:)所有环境变量都很好:Doh和duh…如果您已经在
handleError
中“处理”了错误,您需要重新抛出以在有console.log:)的地方捕获它。这很好,问题是我想在错误处理程序文件上指定消息以发回我的代码,但您的代码不允许我这样做。我将我的问题编辑得更好explanation@mohamedadel那么…为什么你把这个标记为答案呢?当你标记了一个错误的答案时正确,你误导了其他可能与你有同样问题的人。虽然你对Ashish“很好”,但你没有对社区做任何帮助。我不知道为什么这会产生误导,因为原来的问题已经得到了回答。后续问题可以是单独的问题或讨论。所以我觉得没人对我好。有一个问题,有答案。希望这能消除你的疑虑