如何提取process.stdout.write(d)参数d中存储的access token明文值
解决方法
- 你拿到的
d是Node.js的Buffer类型,且HTTP响应的data事件会多次触发,每次返回的都是当前分片的部分数据,必须先把所有分片完整拼接后再做解析才能拿到完整内容 - Zuora的
/oauth/token接口返回标准JSON格式,拼接为完整字符串后需要反序列化为JS对象,才能直接提取access_token字段
修改后的可正常获取令牌的代码如下:
const https = require('https'); const querystring = require('querystring'); const auth = () => { const data = querystring.stringify({ grant_type: 'client_credentials', client_id: 'x', // 替换为你的实际client_id client_secret: 'x', // 替换为你的实际client_secret }) const options = { port: 443, host: 'rest.sandbox.eu.zuora.com', path: '/oauth/token', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': data.length }, method: 'POST', }; const req = https.request(options, (res) => { // 定义变量存储完整响应内容 let resData = ''; res.on('data', (d) => { // 把当前Buffer分片转成utf8字符串拼接 resData += d.toString('utf8'); }).on('end', () => { try { // 反序列化JSON为JS对象 const tokenInfo = JSON.parse(resData); // 直接提取access_token const accessToken = tokenInfo.access_token; console.log('获取到的access_token:', accessToken); // 此处可编写后续使用令牌的业务逻辑 } catch (err) { console.error('响应解析失败:', err, '原始响应内容:', resData); } }); // 监听响应层错误 res.on('error', (err) => { console.error('响应错误:', err); }) }) req.write(data) // 监听请求层错误 req.on('error', (err) => { console.error('请求发送失败:', err); }) req.end() } auth()
之前单独调用toString()无法拿到明文的核心原因是只处理了单个分片的Buffer,没有等所有响应数据返回完整就做了操作,等全部内容拼接完成后再处理即可正常拿到明文。
内容的提问来源于stack exchange,提问作者Hulubina
相关产品推荐
相关产品推荐

