vue不刷新页面,如何在每次请求时,new Date()都能获取到最新时间

我的需求是这样的,我有个request.js里面,放着所有需要请求的接口,而每个接口都有几个共同的参数:

let fixedData = {
    randstr: 'dafdsdasd', 随机字符串;
    sign: 'md5', //参数签名
    time: new Date().getTime(), //当前时间
}

这三个参数是固定的,调用时如下:

export function getUserList(params) {
    return request({
        url: '/user/list',
        method: 'get',
        params: {
            ...params,
            ...fixedData
        }
    })
}

export function getArticleList(params) {
    return request({
        url: '/article/list',
        method: 'get',
        params: {
            ...params,
            ...fixedData
        }
    })
}

//还有N个接口,就不一一列举

request里面是axios请求。
现在问题来了,fixedData里面的time每次都是打开页面时的时间,没有变过,除非刷新页面time才会变,有什么办法让每次请求的时候,time都是当前最新时间?

阅读 4.1k
4 个回答

反正就是配置拦截器。从业务角度来说,如果你所有接口都要加时间,就配全局拦截器,如果只是某些request需要加时间,其他的不要,就单独给这些请求写一个axios服务,单独配拦截器,就是把下面代码的axios换成你的对应的service(instance)

axios.interceptors.request.use(
  config => {
    config.params = {
      ...config.params,
      time: new Date().getTime()
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)
const fixedData = {
    randstr: 'dafdsdasd', // 随机字符串;
    sign: 'md5', // 参数签名
    get time(){ return Date.now() }, // 请求时间
}

如果是每个请求都有fixData,你确实应该把它提取到request. js中的请求拦截里;其次,要每个请求获取的都是当前时间,fixData可以写成函数,调用返回对象。

方法很多啊,只要是“函数”调用,每次都可以拿到新的,比如 @斑斑大大呀 的答案。

再给两种:

// 把 fixedData 定义成函数,每次返回数据都是新的
const fixedData = () => ({
    randstr: "adkfjasdfj",
    sign: "md5",
    time: Date.now()    // 和 new Date().getTime() 是一样的
});

export function getUserList(params) {
    return request({
        url: "/user/list",
        method: "get",
        params: {
            ...params,
            ...fixedData()
            // ---------^^------ 调用函数
        }
    });
}

这种方法可以扩展:随机生成 randstr(如果有必要)。


const fixParams = params => Object.assign({
    randstr: "adkfjasdfj",
    sign: "md5",
    time: Date.now()
}, params);

export function getUserList(params) {
    return request({
        url: "/user/list",
        method: "get",
        params: fixParams(params)
    });
}

这种方法可以校验和修正输入的 params,甚至可以计算参数的 signature(如果需要)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题