Node.js调用Zoom API报错TypeError: 无法解构undefined或null的access_token属性
问题原因
- 你混淆了request-promise(rp)和axios等其他请求库的属性规则,rp的回调返回的响应对象下不存在
data属性,Zoom OAuth接口返回的access_token实际存储在回调的第三个参数body中,需要先对body做JSON解析才能提取对应属性。 - 你没有在rp请求配置中开启
resolveWithFullResponse: true,默认场景下rp的promise链返回值直接是响应体内容,而非完整响应对象,同时混用回调+promise链式调用的写法也会导致参数传递逻辑混乱。 - 即使你在回调中拿到了
access_token也没有向外返回,后续then方法中拿到的req实际是未经处理的响应体字符串,无法直接当做token传入后续请求的Authorization头。
修正代码
你可以直接删掉rp的回调参数,全程用promise链式写法处理,修改后的可运行代码如下:
var username = "client id"; var password = "client password"; var options = { method: 'POST', url: 'https://zoom.us/oauth/token?grant_type=client_credentials', headers: { Authorization: 'Basic ' + Buffer.from(username + ':' + password).toString('base64'), "Content-Type": "application/x-www-form-urlencoded" }, // 自动解析JSON响应,无需手动转换 json: true }; const data = { "topic": "Demo Meeting", "type": 2, "start_time": "2020-05-05 12:00:00", "password": "Hey123", "agenda": "This is the meeting description", "settings": { "host_video": false, "participant_video": false, "join_before_host": false, "mute_upon_entry": true, "use_pmi": false, "approval_type": 0 } }; function getResponse() { return rp(options) .then(function (tokenRes) { // 直接从解析后的响应体提取access_token const { access_token } = tokenRes; console.log(access_token) return fetch("https://api.zoom.us/v2/users/me/meetings", { method: "POST", headers: { Authorization: `Bearer ${access_token}`, "Content-Type": "application/json" }, body: JSON.stringify(data) }); }) .catch(function (err) { console.log('API call failed, reason ', err); }); }
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

