2016-07-22 39 views
0

我想用我的node.js服务器得到一个令牌。node.js https POST与身体属性 - 如何?

当有人调用我的服务器的REST-API(在这个调用的处理过程中,服务器自己发出几个调用)时,下面的代码被执行。


下面的配置工作在邮差:

网址: https://login.windows.net/MyCompanyTenant.onmicrosoft.com/oauth2/token

标题:

  • 缓存控制:无缓存
  • 内容类型:应用程序/ x-WWW窗体-urlencoded

身体:


现在我没有代码试图建立这个请求:

function retrieveAuthToken() { 
    var deferred = q.defer(); 

    var bodyDataString = querystring.stringify({ 
     grant_type: "password", 
     client_id: someClientId, 
     resource: someUrl, 
     username: someUsername, 
     password: someUsernamePassword,   
     client_secret: someString 
    }); 
    //I also tried replacing thie bodyDataString by the bodyString from the working request provided by Fiddler 

    var options = { 
     host: 'login.windows.net', 
     path: '/someTenant/oauth2/token', 
     method: 'POST', 
     headers: { 
      "Content-Type": "application/x-www-form-urlencoded", 
      "Cache-Control": "no-cache" 
     } 
    }; 

    var request = https.request(options, function(response){ 
     var body = ''; 
     response.on('data', function(d) { 
      body += d; 
     }); 
     response.on('end', function() { 
      var parsed = JSON.parse(body); //todo: try/catch 
      rdeferred.resolve(parsed.access_token); 
     });    
    }); 

    request.on('error', function(e) { 
     console.log(e.message); 
     deferred.reject(); 
    }); 

    request.write(bodyDataString); 
    return deferred.promise;  

我没有看到任何错误,我的服务器刚等待并等待...

回答

1

您错过了request.end()来完成请求。或者作为快捷方式,您可以将单个request.write(bodyDataString)更改为request.end(bodyDataString)

+0

工作就像一个魅力! – IntegerWolf