在axios中传递路径参数

时间:2018-02-12 14:07:53

标签: node.js axios

我正在使用带有NodeJ的Axios并尝试在df_list <- df_list[order(lapply(df_list, function(x) mean(x[,1])))] 方法中传递路径参数。例如,如果网址为axios.get(),我希望在调用url = '/fetch/{date}'时将{date}替换为实际日期。

我浏览了Github和StackOverflow上的源代码,但找不到任何方法。

是否可以将带参数的URL保留为占位符并在实际调用Axios的get方法时替换它们?

6 个答案:

答案 0 :(得分:3)

使用模板字符串

    url = `/fetch/${date}`

或者只是在

上标记
    url = '/fetch/'+ date

答案 1 :(得分:2)

Axios没有此功能和it looks like the team don't want to add it

感谢以前的响应者的启发,对我来说,这似乎是最接近您(和我)正在寻找的解决方案的

1-您要存储所有URL及其参数的位置,将它们定义为使用模板字符串返回组合URL的函数:

export var fetchDateUrl = (date) => `/fetch/${date}`;

如果您需要将连接到URL的值的任何特定于类型的格式设置,则此函数是执行此操作的好地方。

2-您要发出请求的位置,使用正确的参数调用该函数:

import { fetchDateUrl } from 'my-urls';
axios.get(fetchDateUrl(someDateVariable))...;

另一种变体,如果您真的很喜欢在调用站点上命名参数的想法,则可以定义URL函数来分解对象,如下所示:

var fetchDateUrl = ({date}) => `/fetch/${date}`;

然后您将使用它:

axios.get(fetchDateUrl({date: someDateVariable}));

答案 2 :(得分:1)

给出一些您可能想将axios调用包装在函数中的API /fetch/${date}

const fetchData = (date) => axios.get(`/fetch/${date}`);

fetchData(dateObject.toFormat('yyyy-mm-dd'))
  .then(result => { ... });

这需要调用代码正确格式化date。您可以通过使用DateTime库来处理日期字符串解析并在函数中执行格式强制操作来避免这种情况。

const fetchData = (date) => axios.get(`/fetch/${date.toFormat('yyyy-mm-dd')}`);

fetchData(dateObject)
  .then(result => { ... });

答案 3 :(得分:1)

您可以这样做:

    getProduct = (id) => axios.get(`product/${id}`, id);

答案 4 :(得分:1)

我认为使用axios拦截器更好地做到这一点:

//create your instance
const instanceAxios = axios.create({
  baseUrl: 'http://localhost:3001'
]);

instanceAxios.interceptors.request.use(config => {
    if (!config.url) {
        return config;
    }

    const currentUrl = new URL(config.url, config.baseURL);
    // parse pathName to implement variables
    Object.entries(config.urlParams || {}).forEach(([
        k,
        v,
    ]) => {
        currentUrl.pathname = currentUrl.pathname.replace(`:${k}`, encodeURIComponent(v));
    });

    const authPart = currentUrl.username && currentUrl.password ? `${currentUrl.username}:${currentUrl.password}` : '';
    return {
        ...config,
        baseURL: `${currentUrl.protocol}//${authPart}${currentUrl.host}`,
        url: currentUrl.pathname,
    };
});


// use like : 
instanceAxios.get('/issues/:uuid', {
   urlParams : {
       uuid: '123456789
   }
})

对于打字稿用户,您需要在.d.ts之一中添加它

declare module 'axios' {
    interface AxiosRequestConfig {
        urlParams?: Record<string, string>;
    }
}

(这是一个POC,未经真正测试,如果发现有问题,请不要犹豫)

答案 5 :(得分:0)

您可以使用模板字符串,即:

let sellerId = 317737

function getSellerAnalyticsTotals() {
    return axios.get(`http://localhost:8000/api/v1/seller/${sellerId}/analytics`);
}