【发布时间】:2015-08-22 08:36:26
【问题描述】:
我刚开始学习 MeteorJS,在完成教程后,我决定尝试使用 Twitter API。最初,我遵循本教程
http://artsdigital.co/exploring-twitter-api-meteor-js/
完成后,我想做的是从推文中抓取数据并将其显示在客户端。
N/A = 正确的身份验证
这是我写的代码:
if (Meteor.isClient) {
Session.setDefault('screen_name', 'John');
Template.hello.helpers({
screen_name: function () {
return Session.get('screen_name');
}
});
Template.hello.events({
'click button': function () {
T.get('search/tweets',
{
q: '#UCLA',
count: 1
},
function(err,data,response) {
var user_name = data.statuses[0].users.screen_name;
Session.set('screen_name', user_name);
}
)
}
});
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
var Twit = Meteor.npmRequire('twit');
var T = new Twit({
consumer_key: 'N/A', // API key
consumer_secret: 'N/A', // API secret
access_token: 'N/A',
access_token_secret: 'N/A'
});
});
}
我认为问题在于,“点击按钮”功能,“T”被视为未定义,因此编译器不知道它是什么或它来自哪里。这个想法确实在我的脑海中引发了一个想法,将我写在里面的东西移动了
if (Meteor.isServer) to if (Meteor.isClient)
但无济于事。它没有用。我的推理是,一旦 Meteor 启动,服务器就会启动,所以如果服务器声明变量 T,我们不应该也能够在客户端访问它吗?
我不确定我的方法是否正确/不知道 Meteor/Meteor NOOB 的约定..所以如果有人可以帮助我,我们将不胜感激! 谢谢!
【问题讨论】:
-
有些代码在您的服务器上运行,有些代码在您的浏览器(客户端)中运行。所以如果你想使用
T服务器端和客户端,你必须在一个公共部分(isServer和isClient之外)定义它,这样客户端和客户端服务器运行它。不过,不确定您是否正确使用了 API。另外,看看Meteor docs。 -
@Oskar 我实际上也是这么想的,并且也尝试过,但我收到了错误 Meteor.npmRequire is not a function。 API 的语法是正确的,我可以向你保证。我按照我帖子中发布的链接中的教程以及 REST API 调用的方式进行操作。此外,将 API 密钥放在 isServer 之外将使其公开供公众查看,这并不令人寒心
-
客户端没有定义,可以使用meteor方法和meteor调用从客户端调用。