使用Axios的HTTP get请求在URL的开头使用本地主机IP发送

4dbbbstv  于 2023-10-18  发布在  iOS
关注(0)|答案(5)|浏览(140)

我尝试使用Axios发送HTTP请求,但收到404错误。原因是请求在URL的开头使用本地主机IP发送,为什么会发生这种情况?
JS:

function getWeather() {

  axios.get('api.openweathermap.org/data/2.5/weather', {
    params: {
      lat: 30.18,
      lon: 30.87,
      appid: '57d9478bc08bc211f405f45b93b79272'
    }
  })
  .then(function(response) {
    console.log(response);
  })

  .catch(function(error) {
    console.log(error);
  })
};
getWeather();

错误:

http://127.0.0.1:5500/api.openweathermap.org/data/2.5/weather?lat=30.18&lon=30.87&appid=57d9478b#####################3b79272 404 (Not Found)
cxfofazt

cxfofazt1#

在Axios的URL参数中,您没有指定用于API请求的协议(可能是HTTP)。因此,Axios将其解释为相对URL路径,并添加本地服务器的路径,因为它需要完整的URL来发出请求。
您可以通过添加http://前缀来轻松修复它:

axios.get('http://api.openweathermap.org/data/2.5/weather', {
cwxwcias

cwxwcias2#

你可以在请求之前配置axios的基本url

axios.defaults.baseURL = 'http://api.openweathermap.org';
axios.get('/data/2.5/weather')
hjzp0vay

hjzp0vay3#

要完全控制axios的基本URL,您可以在创建AxiosInstance时指定baseURL

var getBaseUrl = () => {
        // custom base URL logic examples:
        // - to request a current URL without the search parameters part:
        let baseUrl = window.location.href.slice(0, -window.location.search.length);

        //// or to insert '/api' after the host part
        //let baseUrl = window.location.host + '/api' + window.location.pathname;

        // ensure slash at the end
        if (baseUrl[baseUrl.length - 1] != '/') baseUrl = baseUrl + '/';

        return baseUrl;
    };

    var axiosConfig = {
        baseURL: this.getBaseUrl(),
    };
    var axiosInstance = axios.create(axiosConfig);

    axiosInstance.get('/your-path')
       .then(res => {
           // ...
       });
       // ...
eqfvzcg8

eqfvzcg84#

我经历了同样的问题,我的“.env”文件就像API_URL = 'https://--My-API_URL--'在这里我面临着同样的问题,之后用双引号替换了env链接,我将其更改为API_URL = "https://--My-API_URL--",问题解决了。axios无法理解env-url中的http或https协议,因此base-url是concatinated。

ruoxqz4g

ruoxqz4g5#

我的“.env”文件遇到了同样的问题,使用“”替换“”是一个好主意。

相关问题