1

この時点で、非常に基本的なnodejsの問題に非常に長い間取り組んできましたが、行き詰まっています。他の人も同様の質問をしましたが、何らかの理由で答えがうまくいかないようです。

バックグラウンド:

Express、Backbone、および認証用の Passport を備えた NodeJS を使用しています。Passport はユーザー オブジェクトをリクエストに保存するので、バックボーン ビューに渡そうとしています。

私は 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());

何かご意見は?

4

1 に答える 1

0

近視眼的だったので、プレビューの回答を撤回します:)

ここで答えを見つけることができるようです: ExpressJS 3.0 how to pass res.locals to a jade view?

hth、
アーロン

于 2013-10-03T05:04:10.063 に答える