寻找更新的节点Facebook模板

所以我一直在网上寻找一个好的node.js的Facebook模板,但我真的可以find这个https://github.com/heroku/facebook-template-nodejs 。 这是体面的,但它使用快车2.4.6和节点0.6.x. 我想跟上标准,在express 3.x和node 0.8.x下工作,但是如果我更新package.json我不能再使用与heroku模板一起使用的dynamic助手,主要是这些function:

 app.dynamicHelpers({ 'host': function(req, res) { return req.headers['host']; }, 'scheme': function(req, res) { return req.headers['x-forwarded-proto'] || 'http'; }, 'url': function(req, res) { return function(path) { return app.dynamicViewHelpers.scheme(req, res) + app.dynamicViewHelpers.url_no_scheme(req, res)(path); } }, 'url_no_scheme': function(req, res) { return function(path) { return '://' + app.dynamicViewHelpers.host(req, res) + (path || ''); } }, }); 

有谁知道我在哪里可以find一些最新的信息?

嗨我有同样的问题,为了得到这个工作有多个所需的更改:

首先,您需要更新package.json中的依赖关系:

 "dependencies": { "async": "0.1.x", "ejs": "0.8.x", "express": "3.1.x", "faceplate": "0.4.x" }, 

然后做你的'npm安装'来更新你的本地东西。

在web.js的几个地方需要接下来的手术。 对于我的设置,我需要更新顶部的'require'列表:

 var async = require('async'); var express = require('express'); var util = require('util'); var http = require('http'); var path =require('path'); 

然后在顶部注释掉旧的(2.x)样式expression式初始化。 然后添加一个新的3.x兼容:

 var store = new express.session.MemoryStore; var app = express(); app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.set('view options', { pretty: true }); app.locals.pretty = true; app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('secret')); app.use(express.session({ secret: 'secret', store: store })); app.use(express.static(path.join(__dirname, 'public'))); app.use(require('faceplate').middleware({ app_id: process.env.FACEBOOK_APP_ID, secret: process.env.FACEBOOK_SECRET, scope: 'user_likes,user_photos,user_photo_video_tags' })); // fix dynamic helpers app.use(function(req,res,next){ res.locals.host = req.headers['host']; res.locals.scheme = req.headers['x-forwarded-proto'] || 'http'; res.locals.url_no_scheme = function(path) { return '://' + res.locals.host + path; }; res.locals.url = function(path) { return res.locals.scheme + res.locals.url_no_scheme(path); }; next(); }); }); 

注意前面的块包含你原来的问题的修复。 只需添加您自己的中间件,将这些variables/函数设置为res.locals。 在这一点上,你可以注释掉旧的2.x app.dynamicHelpers块。

添加3.x样式初始化:

 var server = http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port') + ":" + app.get('env')); }); 

在这一点上,问题是“解决”,但它仍然没有工作。 显然面板的最新API(可能是由于FB的变化)已经有所改变。 所以在授权应用程序然后尝试渲染页面之后,你会得到错误。 这是由于handle_facebook_request函数中的facebook.getcallback的签名不正确,以及传递给callback的数据发生了更改。

所以以朋友们为例:

 ... function(cb) { // query 4 friends and send them to the socket for this socket id req.facebook.get('/me/friends', { limit: 4 }, function(friends) { req.friends = friends; cb(); }); }, ... 

应该改成这样:

 ... function(cb) { // query 4 friends and send them to the socket for this socket id req.facebook.get('/me/friends', { limit: 4 }, function(dummy,friends) { req.friends = friends.data; cb(); }); }, ... 

重复这个照片和喜欢,你应该是好的。