Как я могу заставить этот код работать, не показывая мои ключи API? Я строю как приложение на Node.js / Angular / Express

0

Этот код хорошо работает с моим приложением, но process.env не работает из этой функции. Есть ли способ, который я могу назвать process.env вместо того, чтобы отображать мои ключи? Если я оставлю код так, как сейчас, вызов API не будет работать, но если я добавлю свои ключи, он будет работать. Каковы мои параметры или просто почему process.env не работает отсюда, как в командной строке?

function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
    return result;
}

var myApp = angular.module('myApp', []);

myApp.controller('MainCtrl', ['$scope', 'MyYelpAPI', '$window', function($scope, MyYelpAPI, $window) {
    $scope.total = [];
    $scope.businesses = [];
    MyYelpAPI.retrieveYelp('', function(data) {
        $scope.businesses = data.businesses
        console.log($scope.businesses)

        var array = $scope.businesses
        var random = Math.floor((Math.random() * array.length) + 1);
        // console.log(array[random])

        var result = array[random]
        console.log(result)

        if (2 > 1) {
            $scope.businesses = [result]
        }
    });

}]).factory("MyYelpAPI", function($http) {
    return {
        "retrieveYelp": function(name, callback) {
            var method = 'GET';
            var url = 'http://api.yelp.com/v2/search?';
            var params = {
                    callback: 'angular.callbacks._0',
                    location: 'New+York',
                    oauth_consumer_key: process.env.yelp_consumer_key, //Consumer Key
                    oauth_token: process.env.yelp_token, //Token
                    oauth_signature_method: "HMAC-SHA1",
                    oauth_timestamp: new Date().getTime(),
                    oauth_nonce: randomString(32, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'),
                    term: 'bakery'
                    // limit: 15
                };
            var consumerSecret = process.env.yelp_consumer_secret; //Consumer Secret
            var tokenSecret = process.env.yelp_token_secret; //Token Secret
            var signature = oauthSignature.generate(method, url, params, consumerSecret, tokenSecret, { encodeSignature: false});
            params['oauth_signature'] = signature;
            $http.jsonp(url, {params: params}).success(callback);
        }
    }
});
Теги:
yelp

1 ответ

0
Лучший ответ

У вас нет доступа к process.env на стороне клиента, что дает вам доступ к среде Node. Что вам нужно сделать, так это переместить функциональность вызова api на часть сервера (узла) вашего приложения и запросить угловой заводской запрос этой конечной точки, предоставленной вашим кодом сервера. Там, на вашем сервере, вы можете получить доступ к process.env и безопасно хранить свои пары ключей env, не подвергая их публике.

Очень простой план (предполагая, что вы разрабатываете локально и размещаете свой api на http://localhost:3000/api может быть:

// client side angular code

.factory("MyYelpAPI", function($http) {
    return {
        "retrieveYelp": function(name, callback) {
            var method = 'GET';
            var url = 'localhost:3000/api/search';
            var params = {
                ...
            };

            ...

            $http.jsonp(url, {params: params}).success(callback);
        }
    }
});

// node/express routing

app.get('/api/search', require('./api.js').search)

// server side i.e. node code (api.js)

module.exports = {
    search: function(req, res) {
        var params = {
            oauth_consumer_key: process.env.yelp_consumer_key, //Consumer Key
            oauth_token: process.env.yelp_token, //Token
        }

        ...

        res.json(something);
    }
}
  • 0
    Спасибо Ник, это имеет смысл.
  • 0
    Нет проблем. Пожалуйста, проголосуйте или отметьте как правильный ответ :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню