如何在nodejs中使用https.request

我使用github在我的节点应用程序中进行身份validation。 我已经构build了以下代码:

var req = request(postOptions, function (res) { res.on('data', function (d) { ... var getOptions = parseUrl('https://api.github.com/user?access_token=' + accessToken); ... var req = request(getOptions, function (resp) { ... resp.on('data', function (d) { ... }) .on('end', function () { ... }) }); req.end(); }); }); req.write(postData); req.end(); 

我删除了一些代码,因为这里的重点是我有一个请求中的请求。 现在,nodejs已经推迟了问题是,如果这可以用来简化上面的代码?

那么,你没有error handling。 Promise大大清理了正确传播错误的代码,并且不会泄漏资源,因为这些代码会自动执行。 所以不可能做一个公平的比较,因为承诺代码不处理错误仍然传播他们。

 var Promise = require("bluebird"); var request = Promise.promisifyAll(require("request")); function githubAuthenticate() { return request.postAsync(postOptions, postData) .spread(function(response, body) { var accessToken = ... var getOptions = parseUrl('https://api.github.com/user?access_token=' + accessToken); return request.getAsync(getOptions); }) .spread(function(response, body) { }); } 

现在想象一下如果这里失败了? 你只需要在一个地方添加一个.catch ,然后在那里处理。 由于错误自动传播,上面的代码不需要做任何事情。 消费者代码可以做到:

  gitHubAuthenticate().then(function() { }).catch(function(err) { // Any error that happened with the post, get or your code gets here // automatically });