发出来自nodejs的https请求的json响应访问数据的问题

时间:2019-02-12 18:44:47

标签: javascript node.js json

我已经使用NodeJS的本机https模块对HTTPS函数进行了编码,以从API中获取一些JSON。

当我执行GET请求时,我的JSON就很好了,但是当我必须进行PUT请求时,我得到了JSON,但我无法将其转换为对象。

来自GET的答案:

{
  items: [
    { dsname: 'A09999' },
    { dsname: 'A09999.ALLFILES.TEMP' },
  ],
  returnedRows: 16,
  JSONversion: 1
}

来自PUT的答案:

{
  'cmd-response-key': 'C8124546',
  'cmd-response-url':'https://myhost/zosmf/restconsoles/consoles/ibmusecn/solmsgs/C8124546',
  'cmd-response-uri': '/zosmf/restconsoles/consoles/ibmusecn/solmsgs/C8124546',
  'cmd-response':
   ' IEE457I 16.32.55 UNIT STATUS 464\r UNIT TYPE STATUS        VOLSER' }

我的代码:

const makeRequest = options =>
    new Promise(function(resolve, reject) {
        let results = https.request(options, res => {
            res.setEncoding('utf8');
            let body = '';

            res.on('data', data => {
                body += data;
            });
            res.on('end', () => {
                body = JSON.parse(body);
                console.log('body :', body);
                resolve(body);
            });
        });
        if (options.body) {
            // results.write(options.body);
            results.write(JSON.stringify(options.body),['Transfer-Encoding', 'chunked']);
        }
        results.on('error', e => {
            reject(e);
        });
        results.end();
    });

1 个答案:

答案 0 :(得分:1)

好吧,您从帖子中得到的不是有效的json对象。这一点就在这里:

'cmd-response':
   ' IEE457I 16.32.55 UNIT STATUS 464\r UNIT TYPE STATUS        VOLSER'' }

请注意,最后VOLSER后跟到''。这将结束以值开头的字符串并打开一个新字符串。这是无效的JSON。

此外,我建议使用axios之类的库或npm的请求。写得好,使用广泛,不像直接使用https模块那样简单。