Node.js使用Needle发起POST请求时如何在函数间传递access_token变量
解决方案
你当前使用的是回调式写法,回调函数为异步执行,无法直接在回调外部同步获取到返回的access_token,可以通过以下两种方式实现需求:
方式1:回调嵌套(适合逻辑简单的场景)
直接将第二个POST请求的逻辑写在第一个请求的回调函数内,可直接获取access_token使用:
const needle = require('needle'); needle.post('https://example.com/connect/token' , { grant_type: 'password', username: 'some_user_name', password: 'some_password' , client_id : 'swaggerui', client_secret : 'no_password', }, (err, res) => { if (err) { console.error('获取token失败:', err); return; }; // 直接在这里拿到token,调用后续请求 const accessToken = res.body.access_token; // 发起第二个POST请求 needle.post('https://example.com/your/other/api', { // 第二个请求的请求体参数 }, { headers: { Authorization: `Bearer ${accessToken}` } }, (err2, res2) => { // 处理第二个请求的返回 if (err2) { console.error('第二个请求失败:', err2); return; } console.log(res2.body); }) } );
注意:如果后续请求层级多,这种写法会产生回调地狱,更推荐下面的异步写法
方式2:Promise + async/await 写法(推荐)
Needle原生支持Promise调用,用异步写法可以将access_token存在变量中灵活使用,代码结构更清晰:
const needle = require('needle'); // 封装为异步函数 async function runTask() { let accessToken = ''; try { // 第一步:获取access_token const tokenRes = await needle.post('https://example.com/connect/token', { grant_type: 'password', username: 'some_user_name', password: 'some_password' , client_id : 'swaggerui', client_secret : 'no_password', }); accessToken = tokenRes.body.access_token; console.log('获取到的token:', accessToken); } catch (err) { console.error('获取token失败:', err); return; } try { // 第二步:使用token发起第二个POST请求 const secondRes = await needle.post('https://example.com/your/other/api', { // 第二个请求的请求体参数 }, { headers: { Authorization: `Bearer ${accessToken}` } }); // 处理第二个请求的返回结果 console.log('第二个请求返回:', secondRes.body); } catch (err) { console.error('第二个请求失败:', err); } } // 执行异步函数 runTask();
内容的提问来源于stack exchange,提问作者user9142877
相关产品推荐
相关产品推荐

