我有一个运行社交网站的Node.js服务器,我也有一个该网站的Facebook页面.对于我网站上的用户执行的某些操作,我想在我的应用的Facebook页面上发布详细信息.
我在这里提到Thuzi facebook node sdk 如何发布到facebook墙.但是,它需要app id,app secret和临时访问令牌.应用程序ID和应用程序密码是不变的,所以我可以将它们放在我的配置文件中并从那里使用.但是如何在没有前端交互的情况下获取访问令牌?所有帖子将仅由我们的应用程序发布,也将在我们自己的页面上发布.我只想让最终用户的动作触发它.有帮助吗?
我正在使用Sails.js框架顺便说一句.
我正在创建一个带有express.js和angular,js的web应用程序,客户端通过facebook进行身份验证.对于facebook身份验证,我使用facebook-node-sdk连接facebook并检索详细信息.
通过url
重定向进行身份验证时,代码运行良好.但是当我POST
从客户端发送请求以调用相同的代码时,相同的代码不返回任何结果
服务器代码
app.post('/login', Facebook.loginRequired(), function(req, res){
var result = {};
req.facebook.api('/me', function(err, user) {
console.log(user);
if(user !== undefined){
result.status = 1;
result.name = user.name;
res.contentType('json');
res.write(JSON.stringify(result));
res.render('index')
res.end();
}
else{
result.status = 0;
result.name = "Error signing into Facebook";
res.contentType('json');
res.write(JSON.stringify(result));
res.render('/')
res.end();
}
});
});
Run Code Online (Sandbox Code Playgroud)
调用上面的代码时没有错误.console.log
说明:
POST /登录302.
那么可以通过POST
请求验证Facebook,还是应该始终是直接的URL请求?如果是这样的任何选项通过POST进行身份验证?
所以我正在尝试使用Facebook集成构建我的第一个webapp(使用facebook-node-sdk).我让它对api进行简单的调用,但是现在是时候将它们放在一个简单的服务器中并根据请求进行调用(这不是webapp本身,而是更多的API服务器).
我遇到的问题是,即使我(大概)使用蓝鸟来宣传Facebook sdk和我的makeCall
方法,我仍然得到"hi"打印然后"未定义" - console.log
在makeCall之前被调用什么都归还
这是我的app.js
:
var Promise = require('bluebird')
, http = require('http')
, Facebook = Promise.promisifyAll(require('facebook-node-sdk'))
, config = require('./config')
, fb = new Facebook({ appId: config.fb.api, secret: config.fb.secret });
var makeCall = new Promise.method(function (username) {
return fb.api(username, function(err, data) {
console.log('hi')
if (err) return err;
return data;
});
});
http.createServer( function (req, res) {
makeCall('/me').then(console.log)
}).listen(8001);
Run Code Online (Sandbox Code Playgroud) 我正在使用针对node.js的facebook节点sdk从Facebook用户获取信息,例如其供稿和朋友,这很好。
但是我遇到的问题是分页返回的数据-我需要以递归模式构建一些东西。让我解释:
FB.api('/me/feed?limit=5000', {
access_token: token
}, function(response) {
// response is an object that could have as response.paging.next attribute
});
Run Code Online (Sandbox Code Playgroud)
Limit在这里不起作用,因为它返回的最大值为245,并返回指示下一页结果的分页对象。
因为下一个调用取决于上一个异步调用的结果,所以我尝试执行以下操作:
// first call before
var hasNext = response.paging.next ? true : false;
while (hasNext){
FB.api('/me/feed', {
access_token: token
}, function(response_paged) {
response.data.concat(response_paged.data);
// If do not have a next page to break the loop
if (!response_paged.paging.next) hasNext = false;
});
}
Run Code Online (Sandbox Code Playgroud)
现在获取下一个令牌的方式并不重要
关键是我试图在递归模式下进行异步调用,但是它不起作用,这样我就遇到了无限循环。
javascript asynchronous node.js facebook-javascript-sdk facebook-node-sdk