从Backbone.Router模板访问res.locals

时间:2013-10-03 04:32:21

标签: javascript node.js backbone.js express

我一直在研究一个非常基本的nodejs问题,这个问题已经太久了,而且我被卡住了。其他人也提出了类似的问题,但由于某种原因,答案对我来说似乎并不适用。

背景:

我只是使用Express,Backbone和&授权护照。 Passport将用户对象存储在请求中,因此我尝试将其传递给我的Backbone视图。

我一直在使用Node Cellar项目作为起点,并通过Backbone.Router.extend显示我的大部分视图。

我正在尝试做什么:

我只是想将用户对象传递给视图并显示,例如我的模板中的名称。

我尝试了什么:

我正在使用类似于下面的中间件将我的用户传递给模型

app.use(function(req, res, next){
   res.locals.user = req.user;
   next();
});

当我直接使用app.get时,我能够确认这是有效的:

app.get('/test',function index(req, res) {
    res.send(res.locals.user);
});

但是,如果我在HeaderView.html文件中包含以下内容,则所有内容都会中断(即使我可以确认用户是通过app.get定义的):

<%= user === null ? "No user" : user %> (or user.name.familyName, etc.)

我在控制台中收到以下错误:

Uncaught ReferenceError: user is not defined

这是我的main.js的样子:

var AppRouter = Backbone.Router.extend({
    routes: {
        "home"               : "home"  
    },

initialize: function () {
    this.headerView = new HeaderView();
    $('.header').html(this.headerView.el);

    var footerView = new FooterView();
    $('#footer').html(footerView.el);
},

home: function (id) {
    if (!this.homeView) {
        this.homeView = new HomeView();
    }
    $('#content').html(this.homeView.el);
},

});

utils.loadTemplate(['HomeView'], function() {
    app = new AppRouter();
    Backbone.history.start();
});

以下是我设置快递的方式:

app.set('port', process.env.PORT || 3000);
app.use(express.logger('default'));  /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser()),
app.use(express.static(path.join(config.root, 'public')));
app.use(express.cookieParser('optional secret string'));
app.use(express.session({ secret: 'my secret secret key' }));
app.use(passport.initialize());
app.use(passport.session());

有什么想法?

1 个答案:

答案 0 :(得分:0)

我撤回了预览答案,因为它是短视的:)

您似乎可以在此处找到答案:ExpressJS 3.0 How to pass res.locals to a jade view?

HTH,
亚伦