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

我在 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();

    });

请帮我解决这个问题


明月笑刀无情
浏览 99回答 2
2回答

FFIVE

您正在以缓冲区的形式接收数据。使用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;}

拉莫斯之舞

如果您想访问 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]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript