2016-09-16 94 views
0

我正在嘗試使用節點請求模塊進行GET請求。我正在向coursera api提出請求。由於API正在使用CORS。因此我必須提出服務器端請求。 但是,如何在index.html中使用這些數據來動態填充數據。角度的服務器端數據

在這裏,我正在獲取整個數據的文件。有什麼方法可以將這些數據提供給Angular控制器。

簡而言之,我想在角度應用程序中使用coursera api中的數據。我已經使用客戶端,所以對服務器端知之甚少。

var request = require("request"); 
var fs = require("fs"); 
request("https://api.coursera.org/api/courses.v1").pipe(fs.createWriteStream("data.json")); 

回答

0

有兩種方法可以獲取數據到index.html的:

1)用玉(帕格)渲染:

var COURSERA_DATA = null; 
router.get('/', function (req, res) { 
    if (!COURSERA_DATA) { 
     request("https://api.coursera.org/api/courses.v1",function(err,res,body) { 
      COURSERA_DATA = body; /* verify first */ 
      res.render('index', {data: COURSERA_DATA}); 
     }); 
    } else { 
     res.render('index', {data: COURSERA_DATA}); 
    } 
}); 

,然後在index.html的:

script(text/javascript). 
    var theDATA = !{JSON.stringify(data)}; // inserted by jade 

and finally in angular1

app.controller('AnyController',function() { 
    var vm = this; 
    vm.data = theDATA; 
}); 

2)客戶端請求的URL被代理到coursera的API

router.get('/coursera', function (req, res) { 
    request("https://api.coursera.org/api/courses.v1").pipe(res); 
} 

亞倫

0

爲什麼這個問題要消耗右側角數據?例如:

app.controller('controller', function($scope, $http) { 
    $scope.getCursera = function() {    
     $http({ 
      url: "https://api.coursera.org/api/courses.v1", 
      method: "GET", 
      contentType: "application/json" 
     }).success(function(data) {     
      $scope.jsonResponse = data;    
     }).error(function(err) {     
      console.log(err); 
     }); 
    }; 
}); 

如果Coursera允許跨域,這是行得通的。 JSON響應將設置在範圍內,這樣您就可以在視圖中顯示或執行任何操作。

+0

Coursera不允許交叉來源請求。這就是爲什麼這個問題被問到。 – Invictus

0

你可以嘗試實現一個簡單的API來響應發送回控制器這樣的.. 在服務器端。(演示)

var request = require('request'); 

router.get('/coursera', function (req, res,next) { 

request.get(
    'https://api.coursera.org/api/courses.v1', 
    { json: { key: 'value' } }, 
    function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      res.send(body); //response from coursera 
      // if you are using this as middleware write next() 
     }else { 
      res.send(new Error("Error while connecting to coursera")); 
      // if you are using this as middleware write next(err) 
    } 
); 
} 

而在角控制器..

app.controller('controller', function($scope, $http) { 
    $scope.getCoursera = function() {    
     $http({ 
      url: "baseURL/coursera", 
      method: "GET", 
     }).success(function(data) {     
      $scope.data = data;    
     }).error(function(err) {     
      console.log(err); 
     }); 
    }; 
});