节点 & Angular、Feedly RSS API 调用,从服务获取数据并传递给控制器​​。回调或形成 url with auth header for https.get() request

Node & Angular, Feedly RSS API call, get data from service and pass to controller. Callback or forming url with auth header for https.get() request

我有一个 controller.js 文件,我正试图从我的 feed-service.js 文件中获取数据。 FEEDLY_USER_ID 和 FEEDLY_ACCESS_TOKEN 可访问并在单独的 config.js 文件中定义。

controller.js:

$scope.feedlyGlobalAll = FeedService.getGlobalAll();

feed-service.js:

var request = require('request');
var globalOptions = {
    url: 'https://cloud.feedly.com/v3/streams/contents?streamId=user/' + FEEDLY_USER_ID + '/category/global.all',
    auth: {
        'bearer': FEEDLY_ACCESS_TOKEN
    }
};

service.getGlobalAll = function(){
    request.get(globalOptions, function(error, response, body){
        if(!error && response.statusCode == 200){
            service.globalAll = JSON.parse(body);
            return service.globalAll;
        }
        // error code here //
   })
}

我正在使用一个名为 "request" 的 npm 包来生成 GET,因为我无法使 https.get() 工作。此 Feedly API 调用需要 URL、我的用户 ID 和在 header 中传递的访问令牌。

我一直在阅读,显然我应该使用回调或承诺,但我无法让它们中的任何一个工作。使用 http.get(),我可以利用 http.get().then(yada yada) 的承诺,它适用于我在其他地方进行的 forecast.io 调用。请求模块显然不允许 .then()。我通常 运行 进入 TypeError 并且 .then() 不是函数。

当我尝试执行 https.get() 时,这是我使用的代码。我从来没有能够获得成功的回应。

var url = {
    url: 'https://cloud.feedly.com/v3/streams/contents?streamId=user/' + FEEDLY_USER_ID + '/category/global.all',
    'headers': {
        'Authorization': 'Bearer ' + FEEDLY_ACCESS_TOKEN
    }
};

https = require('https');
https.get(url).then(yada yada)

我在 var url 中为 https.get 调用尝试了很多东西。我试过带引号和不带引号,我只试过 auth: bearer token 因为它与请求模块一起工作,但无法让它工作。

这个问题的解决方案是:

  1. 使用现有请求模块代码从 feed-service 回调到控制器。
  2. 找出为 https.get 请求形成 url 的正确方法,然后我可以利用它的 promise 函数。

在请求回调中使用承诺:

service.getGlobalAll = function() {
   return $q(function(resolve, reject) {
      request.get(globalOptions, function(error, response, body){
         if(!error && response.statusCode == 200){
            service.globalAll = JSON.parse(body);
            resolve(service.globalAll);
        } else {
          reject();
        }
     });
   });
};

$q(angular's promise api)可以作为依赖项注入到您的服务中。上面的代码将 return 一个承诺,当你的图书馆 ajax 调用 return 时,它会被解决,所以你可以使用 .then() 访问它。