寻找更新的节点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.get
callback的签名不正确,以及传递给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(); }); }, ...
重复这个照片和喜欢,你应该是好的。