当我在 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);
});
连接数据库并在回调中返回用户的函数
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 函数,以便我的路由可以将其用作中间件。 谢谢!
最佳答案
不要忘记在中间件中调用next
app.use(function (req, res, next) {
userings.openPlayers(function(ps) {
req.user = ps[req.params.id - 1];
next();
});
// this is pointless here
// console.log(req.user);
});
req.user
仅在 openPlayers
函数的回调中设置。
关于javascript - 异步回调不可能嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18452820/