2017-03-03 132 views
0

我对Node.js HTTPS请求有疑问。 请求发送到服务器,该服务器将返回JSON响应。然后我想分析这个响应并将它存储在一个变量中并和其他函数一起使用。Node.JS https请求返回JSON

let obj=JSON.parse(response); 
return obj; 

我写的功能:

let protocol="https"; 
let hostStr="www.example.com"; 
let pathStr="***"; 

let students=makeRequest("ABCDEFG","getStudents")); 
console.log(students); 

function makeRequest(token,method){  
     let obj=''; 
     let options={ 
      host:hostStr, 
      path:pathStr, 
      method:"POST", 
      headers:{"Cookie":"JSESSIONID="+token} 
     }; 
     let https=require(protocol); 
     callback = function(response){ 
      var str=''; 

      response.on('data',function(chunk){ 
       str+=chunk; 
      }); 

      response.on('end',function(){ 
       obj=JSON.parse(str); 
      }); 
     } 
     let request=https.request(options,callback); 
     request.write('{"id":"ID","method":"'+method+'","params":{},"jsonrpc":"2.0"}'); 
     request.end(); 
     return obj; 
    } 

我希望你能帮助我

回答

4

要做到你需要了解的JavaScript asynchrone方面,你想要什么。你所做的不能工作,因为字符串是在异步回调中更新的。我已修复无效的部分。

let protocol="https"; 
 
let hostStr="www.example.com"; 
 
let pathStr="***"; 
 

 
makeRequest("ABCDEFG","getStudents")) 
 
    .then(students => { 
 
     // here is what you want 
 
     console.log(students); 
 
    }); 
 

 

 
function makeRequest(token,method){  
 
    return new Promise(resolve => { 
 
     let obj=''; 
 
     let options={ 
 
      host:hostStr, 
 
      path:pathStr, 
 
      method:"POST", 
 
      headers:{"Cookie":"JSESSIONID="+token} 
 
     }; 
 
     let https=require(protocol); 
 
     callback = function(response){ 
 
      var str=''; 
 

 
      response.on('data',function(chunk){ 
 
       str+=chunk; 
 
      }); 
 

 
      response.on('end',function(){ 
 
       obj=JSON.parse(str); 
 
       resolve(obj); 
 
      }); 
 
     } 
 
     let request = https.request(options,callback); 
 
     request.write('{"id":"ID","method":"'+ method +'","params":{},"jsonrpc":"2.0"}'); 
 
     request.end(); 
 
    }); 
 
}

Here you can read more about asynchonous in javascript

+0

非常感谢您! 现在我有一个新的问题 我必须等待一个令牌,直到收到它,然后执行我的代码的其余部分。 但是我无法等到服务器响应我的请求。我怎样才能做到这一点? –

+0

最简单的方法是在第一个请求的回调中创建下一个请求,但我建议你看看异步函数,它们可以帮助你很多。并检查像请求承诺的库。 – NBeydon