请求融云API接口时的参数问题:errorMessage:“The parameter userId is required.“,code: 1002

本文记录了一位开发者在使用Vue、TypeScript和axios调用融云API时遇到的参数缺失错误。通过设置请求头'Content-Type'为'application/x-www-form-urlencoded;charset=utf-8;'并使用qs.stringify处理参数,最终成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

技术:Vue+TypeScript+axios
机翻“The parameter userId is required.”:参数userId是必需的

↓我明明传了参数的 (我启用了proxy接口代理防止出现跨域,"/im/***"会被代理到"http://api-cn.ronghub.com/***")

private async getUserData(uid:string):Promise<void>{
    var nonce = '123';
    var date = new Date().getTime();
    axios.defaults.headers.post['RC-App-Key'] = AppKey;
    axios.defaults.headers.post['RC-Nonce'] = nonce;
    axios.defaults.headers.post['RC-Timestamp'] = date;
    axios.defaults.headers.post['RC-Signature'] = Sha1(AppSecret+nonce+date);
    const res = (await axios.post(`/im/user/info.json`, {userId: uid})).data;
    if(res?.code===200){
      
    }
  }

代码中的Sha1方法是我复制的别人的代码然后引入使用的(我用的ts,所以要在这个方法内报警告的变量或参数后面添加:any,如 var str:any = '字符串'; 或者((item:any) => {  })),博客地址:https://blog.youkuaiyun.com/qq_40147863/article/details/88034357

AppKey和AppSecret:

 

AppKey和AppSecret是从融云拿的,定义在保存常量的文件里(utils/constant),引入常量然后再使用就行,不想定义常量也可以在Vue的代码外面直接用var定义↓

明明传了参数却硬是说我没传, 于是我开始在网上搜索“后端拿不到post请求的参数”
然后就添加了一行代码

private async getUserData(uid:string):Promise<void>{
    var nonce = '123';
    var date = new Date().getTime();
    axios.defaults.headers.post['RC-App-Key'] = AppKey;
    axios.defaults.headers.post['RC-Nonce'] = nonce;
    axios.defaults.headers.post['RC-Timestamp'] = date;
    axios.defaults.headers.post['RC-Signature'] = Sha1(AppSecret+nonce+date);

    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8;';

    const res = (await axios.post(`/im/user/info.json`,{userId: uid})).data;
    if(res?.code===200){
      
    }
  }

但还是不行
于是在网上搜了半天后又改了下代码,使用qs.stringify对参数进行了处理,然后接口总算调用成功了

qs在安装axios的时候会一起安装,只要用“ import qs from 'qs'; ”引入就行,上面介绍AppKey和AppSecret的图里就有引入qs的代码

private async getUserData(uid:string):Promise<void>{
    var nonce = '123';
    var date = new Date().getTime();
    axios.defaults.headers.post['RC-App-Key'] = AppKey;
    axios.defaults.headers.post['RC-Nonce'] = nonce;
    axios.defaults.headers.post['RC-Timestamp'] = date;
    axios.defaults.headers.post['RC-Signature'] = Sha1(AppSecret+nonce+date);
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8;';
    const res = (await axios.post(`/im/user/info.json`, qs.stringify({userId: uid}))).data;
    if(res?.code===200){
      
    }
  }

 可以看到修改了以后,接口参数处的Request Payload变成了Form Data

总结(在其它代码符合融云官方文档规范的情况下):
1.设置请求头的'Content-Type'为'application/x-www-form-urlencoded;charset=utf-8;'

2.使用qs.stringify对接口参数进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值