使用Meteor获取Facebook好友列表



我添加了meteorhacks:npm软件包,并使用以下命令安装了fbgraph:

$ npm install fbgraph

我的服务器端代码现在看起来像这样:

function Facebook(accessToken) {
    this.fb = Meteor.npmRequire('fbgraph');
    this.accessToken = accessToken;
    this.fb.setAccessToken(this.accessToken);
    this.options = {
        timeout: 3000,
        pool: {maxSockets: Infinity},
        headers: {connection: "keep-alive"}
    }    
    this.fb.setOptions(this.options);
}
Facebook.prototype.query = function(query, method) {
    var self = this;
    var method = (typeof method === 'undefined') ? 'get' : method;
    var data = Meteor.sync(function(done) {
       self.fb[method](query, function(err, res) {
           done(null, res);
       });
   });
   return data.result;
}
Facebook.prototype.getUserData = function() {
return this.query('me');
}
Facebook.prototype.getFriendsData = function() {
    return this.query('/me/friendlists');
}
Meteor.methods({
    getUserData: function() {
       var fb = new Facebook(Meteor.user().services.facebook.accessToken);
       var data = fb.getUserData();
       return data;
       },
    getFriendsData: function() {
       var fb = new Facebook(Meteor.user().services.facebook.accessToken);
       var data = fb.getFriendsData();
       return data;
    }
});
Meteor.publish("getUserData", function () {
    return Meteor.users.find({_id: this.userId});
});
Meteor.publish("getFriendsData", function(){
    return Meteor.users.find({_id: this.userId});
});

我的配置.js也是我认为的顺序:

Accounts.ui.config({
    passwordSignupFields: "USERNAME_ONLY",
    requestPermissions: {
        facebook: ['email', 'user_friends'],
    }
});

在客户端,我有一个模板:

<template name="friends">
    <div class="container">
        {{friendlist}}
    </div>
</template>

我试图用以下方式调用"getFriendsList":

Template.friends.helpers({
    friendlist: function() {
       Meteor.call("getFriendsData");
   }
});

最后,我的packages.json看起来像这样:

{
    "fbgraph": "1.1.0"
}

当我尝试运行我的应用程序时,我收到如下错误:

Exception while simulating the effect of invoking 'getFriendsData
TypeError: Meteor.npmRequire is not a function

如果这是一个愚蠢的问题,我很抱歉,我对流星相当陌生。而我一辈子都想不通这个。我真的很感激一些帮助。

你需要添加 npm 模块。npm 模块的集成并不是 meteor 与 meteorhacks:npm 模块的原生功能。使用以下命令安装它:

meteor add meteorhacks:npm

每当您通过 npm 添加非流星包时,您都必须使用 Meteor.npmRequire() .如果通过meteor add foobar安装,则不需要该软件包。

如果您遇到问题,请尝试以下操作(如果您使用的是 Meteor 1.2):

rm -rf packages/npm-container
meteor remove npm-container
meteor update meteorhacks:npm

此外,您的模板需要修复,因为它目前不会根据您的 Meteor.call() 进行更新。如果您使用 onCreated() 或 onRendered(),您可以触发 Meteor.call() 并设置一个会话变量,您的助手之一将使用该变量来填充您的模板:

Template.friends.onCreated(function() {
    Meteor.call("getFriendsData", function(error, friends) {
        if (error) {
            console.log(error);
        } else {
            Session.set('friends', friends);
        }
    });
});
Template.friends.helpers({
   friendlist: function() {
       return Session.get('friends');
   }
});

如果您没有获得任何内容,请更改此设置以检查您是否在服务器端获取数据:

getFriendsData: function() {
   console.log(Meteor.user().services.facebook.accessToken);
   var fb = new Facebook(Meteor.user().services.facebook.accessToken);
   var data = fb.getFriendsData();
   console.log(data);
   return data;
}

相关内容

  • 没有找到相关文章

最新更新