[英]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.