Javascript Axios-从响应对象获取请求URI数据

Javascript Axios-从响应对象获取请求URI数据,javascript,node.js,request,axios,Javascript,Node.js,Request,Axios,因此,我正在尝试将节点项目从使用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);

因此,我正在尝试将节点项目从使用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(req)
  .then(response => {
    console.log(response.status);
    console.log(response.request.uri);
  })
  .catch(err => console.error(err));
但是当我像这样使用axios时

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(req)
  .then(response => {
    console.log(response.status);
    console.log(response.request.uri);
  })
  .catch(err => console.error(err));
我的response.request.uri未定义


那么,我是不是用错了axios软件包,有另一种方法来获取我想要的信息,或者axios不支持这些信息???

您可以通过访问
response.config.url
来访问它,不过,如果只需要URI,则需要使用regex,或者可以通过使用数组或字符串方法使用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));
// 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));
如果您不需要解析后的URL信息,也不需要其他包:

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

在您从
res.config.url
获得
url
后,您可以使用
url.parse
直接解析@Matt Weber的答案,并从那里访问
.hash
.query

例如:

const url = require('url')
console.dir(url.parse('protocol://host.com/?q=q1#hash'));

// Outputs:
Url {
  protocol: 'protocol:',
  slashes: true,
  auth: null,
  host: 'host.com',
  port: null,
  hostname: 'host.com',
  hash: '#hash',
  search: '?q=q1',
  query: 'q=q1',
  pathname: '/',
  path: '/?q=q1',
  href: 'protocol://host.com/?q=q1#hash'
}