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
関数に戻し、ルートがミドルウェアとして使用できるようにする方法です。ありがとう!