无法向MEAN JS中的外部API发送http / https请求

时间:2015-04-09 12:39:58

标签: angularjs node.js angularjs-directive mean-stack meanjs

我正在MEAN JS上开发一个应用程序。我是MEAN JS的新手。
我想访问外部API以获得json respone如下 -
{"id":"7gd6ud7ud5r0c","name":"jack","zip":"94109","gender":"Male"}

我有这个参考here (https://nodejs.org/api/https.html) ..
但我不知道如何在客户端控制器中使用http / https请求。

这是我的 express.js

'use strict';

/**
 * Module dependencies.
 */
var fs = require('fs'),
http = require('http'),     // required already
https = require('https'),   // required already
express = require('express'),
morgan = require('morgan'),
bodyParser = require('body-parser'),
.....
.....
.....

这是我的 invite.client.controller.js

    'use strict';
    angular.module('core').controller('InviteController', ['$scope', 
    'Authentication', '$http',
        function($scope, Authentication, $http) {
        // This provides Authentication context.
        $scope.authentication = Authentication;

     $scope.getMembersFromAPI = function(){

            ***************************************
            // this block shows error ReferenceError: require is not defined
            var http = require('http'),  
                https = require('https');
            ***************************************
            var options = {
              hostname: 'https://api.somedemodp.com/v5/td?api_key=ec96c9afcbb6bbb8f5a687bd7&email=vlad@rapleafdemo.com',
              path: '/',
              method: 'GET'
            };

            var req = https.request(options, function(res) {
              console.log('statusCode: ', res.statusCode);
              console.log('headers: ', res.headers);

              res.on('data', function(d) {
                process.stdout.write(d);
              });
            });
            req.end();

            req.on('error', function(e) {
              console.error(e);
            });

        };
    }
]);

2 个答案:

答案 0 :(得分:2)

...你是否混淆了你的角度和快速代码?你没有角度使用require。你使用依赖注入。

Angular是前端,express是后端。它们是分离的。

angular.module('core').controller('InviteController', ['$scope', 
'Authentication', '$http',
    function($scope, Authentication, $http) 

这是你进行依赖注入的地方(类似于node / express中的require)你已经注入了$ http。

您实际上可以直接使用$ http调用从角度内调用外部API - 来自docs:

// Simple GET request example :
$http.get('/someUrl').
 success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});

https://docs.angularjs.org/api/ng/service/ $ HTTP

答案 1 :(得分:0)

对于遇到此问题的人。我建议您阅读此博客:calling third party web api's from the mean stack

您遇到的问题是浏览器阻止跨域调用。要做的就是从服务器联系API并将其发送到前端。

注意:我自己没有尝试过,但是,通过在接收端启用CORS +发送正确的标头可以让您从前端进行跨域调用。