2017-06-22 4 views
2
app.use(function(req, res, next) { 
    var chatlog = []; 
    console.log('executed many timews why?') 
var chatlog = redisClient.lrange('messages', 0, 99, function(err, reply) { 
     if (!err) { 
      var result = []; 
      for (var msg in reply) result.push(JSON.parse(reply[msg])); 
      if (result.length == 0) { 
       result.push({ 
        "msg": 'welcome', 
        "nickname": "guest1" 
       }) 
      } 
      console.log(result) 
     } else { 
      console.log('error getting chat messages') 
     } 
     res.locals = { 
      chatlog: result 
     }; 
     next(); 
     return 
    }); 

    app.get('/', (req, res) => { 
res.render('index', {  }) 
    }) 

私はかつて「/」にアクセスすると、コンソールには次のように出力呼ば行き方:エクスプレスミドルウェア何回

executed many timews why 
[ { msg: 'welcome', nickname: 'guest1' } ] 
executed many timews why 
executed many timews why 
executed many timews why 
executed many timews why 
[ { msg: 'welcome', nickname: 'guest1' } ] 
[ { msg: 'welcome', nickname: 'guest1' } ] 
[ { msg: 'welcome', nickname: 'guest1' } ] 
[ { msg: 'welcome', nickname: 'guest1' } ] 
executed many timews why 
executed many timews why 
[ { msg: 'welcome', nickname: 'guest1' } ] 
[ { msg: 'welcome', nickname: 'guest1' } ] 
executed many timews why 
[ { msg: 'welcome', nickname: 'guest1' } ] 

どのように私は私のミドルウェアが一度だけ実行することができますか?私が次から離れたら、それは一度だけ実行されますが、ページはロードされません。私がnext()を保持すると、何度も実行されます。

答えて

3

ミドルウェアは、リクエストごとに呼び出されるように設定されています。つまり、正しく設定されていないExpressでは、インデックステンプレートで使用されている画像、スタイルシート、またはJSファイルごとに呼び出されます。

それらのファイルがexpress.staticによって提供されている場合は、express.static宣言た後、あなたのミドルウェアがロードされることを確認してください:express.staticなるので

app.use(express.static(...)); 

app.use(...your middleware...); 

app.get('/', ...); 

この方法では、あなたのミドルウェアは、静的なリソースのために呼び出されることはありませんミドルウェアの前にそれらを扱います。

また、別のミドルウェア機能を作成して、特定のルートにそれを挿入することができます。

let myMiddleware = function(req, res, next) { 
    ... 
}); 

app.get('/', myMiddleware, function(req, res) { 
    res.render('index', {}) 
}); 
+0

ありがとうございました。今それは適切に動作します。 – needitohelp

+0

それは多くの意味を作り、私の問題を解決しました。ありがとうございました! –

関連する問題