0

node.js でルートを定義するときに、リクエストに応じてミドルウェアを呼び出してユーザーをロードしようとしています。ただし、データベースからユーザーをプルすることの非同期性により、それは不可能のようです。

別の機能を利用してデータベースに接続するミドルウェア

function loadUsers (req, res, next) {
  userings.openPlayers(function(ps) {
    req.user = ps[req.params.id - 1];
  });
  console.log(req.user);
}

ミドルウェアを使用するルート

app.get('/player/game/:id', loadUsers, function(res, req) {
  console.log(req.user);
});

db に接続し、コールバックでユーザーを返す関数

function openPlayers(callback) {
  db.hgetall("players", function(err, objs) {
    var players = [];
    // Objects of Response
    for (var k in objs) {
      // Items are the individual key-value object
      var newPlayer = {};
      var items = JSON.parse(objs[k]);
      for (var x in items) {
        // x is the key for each object
        newPlayer[x] = items[x];
      }
      players.push(newPlayer);
    }
    callback(players);
  });
}
module.exports.openPlayers = openPlayers;

データベース接続機能が大活躍!私の特定の問題は、コールバックを使用してユーザーをloadUsers関数に戻し、ルートがミドルウェアとして使用できるようにする方法です。ありがとう!

4

2 に答える 2