0

Express 3.0 アプリ用のヘルパー メソッドを作成しようとしています。ユーザーに挨拶する例を次に示します。

  app.locals.greet = function(req,res) {
    return "hey there " + req.user.name;
  }

ただし、その関数内reqresは使用できません。jade テンプレート内で使用できるヘルパーを作成するにはどうすればよいですか? 私はこれを間違っていますか?

4

3 に答える 3

2

ルーターが render メソッドを呼び出す前に、 req/オブジェクトを使用してこれらの値を設定するミドルウェア関数/ハンドラーを追加する必要があります。res同様に、このハンドラーは、知っておく必要のある情報が定義された後に定義する必要があります。(つまり、セッションミドルウェアの後)

// AFTER sessions/auth/etc -- app.use(express.session(...))
app.use(function (req, res) {
    // set any locals using req/res
    res.locals.user = req.user;
    res.locals.greet = function () {
        return "hey there " + req.user.name;
    }
});
// BEFORE router -- app.use(express.router);

詳細については、 res.localsの API ドキュメントを参照してください。

于 2012-12-15T16:28:21.390 に答える
2

私の設定app.jsファイルを見てください!変数はそのコンテキストで使用できるようになるため、これはうまくいくはずです。

app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');

app.use(connect.compress());
app.use(express.static(__dirname + "/public", { maxAge: 6000000 }));
app.use(express.favicon(__dirname + "/public/img/favicon.ico", { maxAge: 6000000 }));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({
    secret: config.sessionSecret,
    maxAge: new Date(Date.now() + (1000 * 60 * 15)),
    store: new MongoStore({ url: config.database.connectionString })
}));
app.use(function(req, res, next){
    console.log("\n~~~~~~~~~~~~~~~~~~~~~~~{   REQUEST   }~~~~~~~~~~~~~~~~~~~~~~~".cyan);
    res.locals.config = config;
    res.locals.session = req.session;
    res.locals.utils = viewUtils;
        res.locals.greet = function(){
                //req and res are available here!
                return "hey there " + req.user.name;
        };
    next();
});
app.use(app.router);
});
于 2012-12-14T22:25:32.097 に答える
2

以下は、ヘルパー関数で を使用する方法を示す簡単な例の 3 つの部分ですreq.locals

ヘルパー関数:

app.locals.greet = function(user) {
  return "hey there " + user.name;
}

ビュー テンプレート:

h1= greet(user)

レンダリング機能:

function(req, res) {
  res.render('myview', {user: req.user});
};

設定の詳細については、こちらこちらreq.localsの回答を参照してください。

于 2012-12-15T02:07:21.030 に答える