首页 > 解决方案 > axios - 从响应对象中获取请求 URI 数据

问题描述

所以,我正在尝试将节点项目从使用request.js迁移到使用axios.js

当我使用请求包时,我可以像这样从响应对象中获取 URI 数据

request(req, (err, response) => {
  if (err) console.error(err);
  console.log(response.statusCode);
  console.log(response.request.uri);
  console.log(response.request.uri.hash);
  console.log(response.request.uri.host);
});

但是当我像这样使用 axios

axios(req)
  .then(response => {
    console.log(response.status);
    console.log(response.request.uri);
  })
  .catch(err => console.error(err));

我的response.request.uri未定义

那么,我是不是使用了错误的 axios 包,还有另一种方法可以获取我想要的信息,或者 axios 不支持它?

标签: javascriptnode.jsrequestaxios

解决方案


您可以通过访问response.config.url or response.request.responseURL来访问它,但如果您只想要 URI,则需要使用正则表达式,或者您可以通过使用数组或字符串方法来使用 JS。

例子:

const axios require('axios');
const url = require('url');

axios(req)
  .then(response => {
    const parsedURL = url.parse(response.config.url);
    console.log(parsedURL.host);
  })
  .catch(err => console.error(err));

如果您不需要解析的 URL 信息并且不想要另一个包:

// Remove the URL Protocol (https:// & http://) using regex. 
const removeHttpProtocol = (url) => url.replace(/(^\w+:|^)\/\//, '');

axios(req)
  .then(response => {
    console.log(const responseURI = removeHttpProtocol(response.config.url);
    console.log(responseURI);
  })
  .catch(err => console.error(err));

推荐阅读