为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决“NodeJS API 调用响应是无法解析的对象”?

如何解决“NodeJS API 调用响应是无法解析的对象”?

明月笑刀无情 2023-09-21 16:58:34
我在 API 调用后得到以下结果。我的节点版本是12.x {"type":"Buffer","data":[123,34,101,114,114,111,114,115,34,58,91,34,74,87,84,32,105,115,32,101,120,112,105,114,101,100,32,111,114,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,112,114,111,112,101,114,32,39,101,120,112,39,32,99,108,97,105,109,34,93,125,11]}请参阅下面的代码片段:let postOptions = {        host: 'vault.server',        path: '/v1/auth/gcp/login',        method: HTTPS.POST_REQUEST,        headers: {            'Content-Type': 'application/json; charset=utf-8',            'X-Vault-Namespace': 'mynamespace'        },        json: true,                rpDefaults: {            strictSSL: false        }    };    let requestPayLoad = {        "role": this._vaultRole,        "jwt": signedJWT    };    console.log(JSON.stringify(requestPayLoad));    console.log(JSON.stringify(postOptions));    try {        let result = await HTTPS.makeRequest(postOptions, JSON.stringify(requestPayLoad), HTTPS.POST_REQUEST);        console.log('Response***************',JSON.stringify(result));        return result.auth.client_token;    }请参阅下面的 http make 请求方法的代码片段。return new Promise((resolve, reject) => {        let rq = https.request(options, (res) => {            let response;            let chunks = [];            res.on('data', (chunk) => {                chunks.push(chunk);            });            res.on('end', () => {                response = Buffer.concat(chunks);                return resolve(response);            });        });        rq.on('error', (e) => {            return reject({'statusCode': 500, 'success': false, 'error': e.toString()});        });        if (type === 'POST') {            rq.write(data);        }        rq.end();    });请帮我解决这个问题
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

您正在以缓冲区的形式接收数据。使用toString()方法将此缓冲区转换为try块内的字符串。


try {

  let result = await HTTPS.makeRequest(postOptions, JSON.stringify(requestPayLoad), HTTPS.POST_REQUEST);

  console.log('Response***************', result.toString());

  return result.auth.client_token;

}


查看完整回答
反对 回复 2023-09-21
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

如果您想访问 API 调用返回的响应中的数据,请执行以下操作:

let data = result.data;

我想获得 client_token,如下所示:

return result.auth.client_token;

这是不可能的,因为响应没有 auth 属性:

 {"type":"Buffer","data":[123,34,101,114,114,111,114,115,34,58,91,34,74,87,84,32,105,115,32,101,120,112,105,114,101,100,32,111,114,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,112,114,111,112,101,114,32,39,101,120,112,39,32,99,108,97,105,109,34,93,125,11]}


查看完整回答
反对 回复 2023-09-21
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信