nuxt.js ssr asyncData 请求传参FromData格式后端拿不到的问题(已解决)

这遇到一个坑,记录一下。网上相关有用资料几乎没有。大多情况下都是传参格式用FromData传参的!

这里用 nuxt ssr 在 FromData 传参的时候会遇到这个毛病,在前端渲染请求的时候
是这样 

  created(){




    this.$axios.$post(P_PRODUCT_DETAILS,{product_id:2}).then(res => {
      console.log(res)
    }).catch(e => {
      console.log(e)
    })
  },
在 请求封装里面 用qs 一下就可以了
  $axios.$post = (url, params)=> {
    // console.log(params)
    return new Promise((resolve, reject) => {
      $axios.post(url, QS.stringify(params))
        .then(res => {
          resolve(res.data)
        }).catch(err => {
        reject(err)
      })
    })
  }
}

这时候xhr 会变成 如愿的格式,后端可以正常接收!

但是如果是在 服务端请求传参的话  光这样就不行了    ,这样会就会报错了。后端提示你没传

  async asyncData(conxt) {
    let [requestProductData, request2Data] = await Promise.all([
      conxt.$axios.$post(P_PRODUCT_DETAILS,{product_id:2}),
      // conxt.$axios.get(P_SELLER_HOME,{requestName:'userOrders'})
    ])
    console.log(requestProductData)
    return {
      dataProduct: requestProductData.data,
      // dataOrder: request2Data.data,
    }
  },

因为啥呢,因为在前端渲染的时候用的 qs 的时候会自动加 application/x-www-form-urlencoded

然后在服务端请求的时候不会自动加,这时候就要手动在请求头加上就可以了

export default function ({ $axios,app,redirect }) {
  $axios.onRequest(config => {
    config.headers.common['Content-Type'] = 'application/x-www-form-urlencoded'
})
}

这样就可以解决该问题了,不然的话,只有后端采用obj方式传参了!!!!!!!!!!!!!!

你可能感兴趣的:(javascript,前端,开发语言)