Javascript 查找更新的节点Facebook模板

Javascript 查找更新的节点Facebook模板,javascript,facebook,node.js,express,Javascript,Facebook,Node.js,Express,所以我一直在网络上搜索一个好的node.js Facebook模板,但我真正能找到的就是这个。这很不错,但它使用了express 2.4.6和node 0.6.x。我想跟上标准,在express 3.x和node 0.8.x中工作,但如果我更新package.json,我就不能再使用heroku模板附带的动态帮助程序,主要是以下功能: app.dynamicHelpers({ 'host': function(req, res) { return req.headers['host'

所以我一直在网络上搜索一个好的node.js Facebook模板,但我真正能找到的就是这个。这很不错,但它使用了express 2.4.6和node 0.6.x。我想跟上标准,在express 3.x和node 0.8.x中工作,但如果我更新
package.json
,我就不能再使用heroku模板附带的动态帮助程序,主要是以下功能:

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 || '');
    }
  },
});

有人知道我在哪里可以找到一些最新的信息吗?

嗨,我也遇到了同样的问题,要使此功能正常工作,需要进行多个更改:

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

"dependencies": {
"async":     "0.1.x",
"ejs":       "0.8.x",
"express":   "3.1.x",
"faceplate": "0.4.x"
},
然后进行“npm安装”以更新本地内容

下一次手术需要在web.js的几个地方进行。对于我的设置,我需要更新顶部的“需要”列表:

var async   = require('async');
var express = require('express');
var util    = require('util');
var http = require('http');
var path =require('path');
然后在顶部注释掉旧的(2.x)样式的express初始化。然后添加一个新的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();
});
});
请注意,前面的块包含对原始问题的修复。只需添加您自己的中间件,将这些变量/函数设置为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的变化)有所改变。因此,在授权应用程序然后尝试呈现页面后,您将出现错误。这是由于
facebook.get
回调在
handle\u facebook\u request
函数中的签名不正确,以及传递给回调的数据发生了更改

因此,以朋友为例:

...
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();
    });
  },
...

对照片和喜欢的人重复这一点,你应该很好。

我希望72小时前能收到这篇帖子。让Node与Heroku一起工作的步骤:(1)下载示例应用程序(2)将所有软件包更新到类似当前版本的版本(3)完全重新编写示例应用程序。非常好,感谢分享!Heroku Facebook模板位于GitHub()上,以防您希望对这些更新执行拉取请求。