2015-07-15 1 views
-1

Я хочу использовать этот код узла https://arian.io/how-to-use-yelps-api-with-node/ в своем приложении Meteor, чтобы взаимодействовать с API 2.0 Yelp и возвращать результаты, которые я могу использовать.У меня есть пакет Node.js в приложении Meteor, как я могу назвать функцию?

Я установил meteorhacks: НПМ и добавлены соответствующие пакеты узловые packages.json:

{ 
"oauth-signature" : "1.3.0", 
"nonce" : "1.0.3", 
"request" : "2.58.0", 
"lodash" : "3.10.0" 
} 

Это файл мой .js

//Start IsCLient 
if (Meteor.isClient) { 

//Call Yelp Helper 
    Template.yelper.events({ 
    'click button': function() { 
    data = callYelp(); 
    } 
    }); 
//Call Yelp Helper 


//Call Yelp 
    callYelp = function callYelp(user) { 
    Meteor.call('callYelp', user); 
    } 
//End Call Yelp 

} 
//End IsClient 



if (Meteor.isServer) { 
    Meteor.startup(function() { 
    // code to run on server at startup 
    }); 
} 



//Methods 
Meteor.methods({ 
'callYelp': function callYelp(user) { 


/* require the modules needed */ 
var oauthSignature = Meteor.npmRequire('oauth-signature'); 
var n = Meteor.npmRequire('nonce')(); 
var request = Meteor.npmRequire('request'); 
var qs = Meteor.npmRequire('querystring'); 
var _ = Meteor.npmRequire('lodash'); 

/* Function for yelp call 
* ------------------------ 
* set_parameters: object with params to search 
* callback: callback(error, response, body) 
*/ 


request_yelp = function(set_parameters, callback) { 


    /* The type of request */ 
    var httpMethod = 'GET'; 

    /* The url we are using for the request */ 
    var url = 'http://api.yelp.com/v2/search'; 

    /* We can setup default parameters here */ 
    var default_parameters = { 
    location: 'San+Francisco', 
    sort: '2' 
    }; 

    /* We set the require parameters here */ 
    var required_parameters = { 
    oauth_consumer_key : process.env.oauth_consumer_key, 
    oauth_token : process.env.oauth_token, 
    oauth_nonce : n(), 
    oauth_timestamp : n().toString().substr(0,10), 
    oauth_signature_method : 'HMAC-SHA1', 
    oauth_version : '1.0' 
    }; 

    /* We combine all the parameters in order of importance */ 
    var parameters = _.assign(default_parameters, set_parameters, required_parameters); 

    /* We set our secrets here */ 
    var consumerSecret = process.env.consumerSecret; 
    var tokenSecret = process.env.tokenSecret; 

    /* Then we call Yelp's Oauth 1.0a server, and it returns a signature */ 
    /* Note: This signature is only good for 300 seconds after the oauth_timestamp */ 
    var signature = oauthSignature.generate(httpMethod, url, parameters, consumerSecret, tokenSecret, { encodeSignature: false}); 

    /* We add the signature to the list of paramters */ 
    parameters.oauth_signature = signature; 

    /* Then we turn the paramters object, to a query string */ 
    var paramURL = qs.stringify(parameters); 

    /* Add the query string to the url */ 
    var apiURL = url+'?'+paramURL; 

    /* Then we use request to send make the API Request */ 
    request(apiURL, function(error, response, body){ 
    return callback(error, response, body); 
    }); 
}; 


} 

}) 

Все, кажется, включают в себя должным образом, и Я считаю, что все правильно настроено, добавив код в метод, а затем называя его нажатием кнопки.

Моя проблема заключается в том, что в методе callYelp существует функция, создающая фактический запрос к Yelp, и я не уверен, как его запустить.

Вы можете видеть в комментариях в моем коде, где я пытался заставить его работать.

Это вопрос о сфере применения? Проблема с узлом?

Кроме того, я знаю, что у меня еще нет параметров API-интерфейса Yelp (токен и т. Д.), Я добавлю их, я просто пытаюсь подключить его и, как минимум, вызвать ошибку.

request(apiURL, function(error, response, body){ 
    return callback(error, response, body); 
    }); 

ответ

0

Я считаю, что вы можете использовать http пакета http://docs.meteor.com/#/full/http, чтобы сделать звонок, не забудьте добавить пакет перед использованием:

meteor add http 

И помните, чтобы разблокировать, прежде чем сделать звонок или метеор процесс будет блокироваться им. Это пример на странице документации метеоров:

Meteor.methods({checkTwitter: function (userId) { 
    check(userId, String); 
    this.unblock(); 
    try { 
    var result = HTTP.call("GET", "http://api.twitter.com/xyz", 
          {params: {user: userId}}); 
    return true; 
    } catch (e) { 
    // Got a network error, time-out or HTTP error in the 400 or 500 range. 
    return false; 
    } 
}}); 
Смежные вопросы