axios 如何获取params 并重新赋值?

发布于 2022-09-11 21:14:16 字数 1339 浏览 16 评论 0

在axios拦截器中,获取config.params并重新赋值,但是发现变量好像进行了提升。
代码如下:

service.interceptors.request.use(
  config => {
    if (store.getters.token) {
      config.headers['Admin-Token'] = getToken()
    }
    buildSign(config)
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)
function buildSign (config) {
  const map = new Map()
  if (config.params !== undefined) {
    var signParams = Object.assign(config.params)
    Object.keys(signParams).forEach(function (key) {
      map.set(key, signParams[key])
    })
  }
  console.log(map)

  const mapAsc = new Map([...map.entries()].sort())
  let s = ''
  mapAsc.forEach(function (value, key) {
    s += key + '=' + value + '_'
  })
  s = encodeURIComponent(
    removeChar(config.url) + '_' + s + process.env.VUE_APP_TIMA_SECRETKEY
  )
  s = md5(s)
  config.params['sign'] = s
}

此时发现,如果我想重新赋值config.params['sign'],发现在我进行遍历

 var signParams = Object.assign(config.params)
    Object.keys(signParams).forEach(function (key) {
      map.set(key, signParams[key])
    })

时map已经存在sign的key了,这是发生了什么问题呢?变量提升吗。小白求问,谢谢大家
此时的签名就是错误的。如果我注释掉最后的

  config.params['sign'] = s

签名就是正确的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文