从承诺中返回数据到中间件
我是新的nodejs,这可能看起来很平凡,但我从检索返回承诺的函数的数据时遇到问题。 中间件的响应被发送回前端。 这是我的代码
// middleware app.get('/player', function(req, res) { //data i want to return res.send(getPlayerStats.getPlayerId(req.query.name))); }); //getPlayerStats.js var getPlayerId = function(name) { return start(name) .then(getPlayerInGame) .then(getPlayerStats) .then(getPlayers); //.then(sendToSingular) } //getplayers function var getPlayers = function(data) { return data; }
我是以错误的方式发回数据? 我在前端看到的回应是一个具有原型作为唯一属性的对象。 我可以打印出getPlayers()中的数据,我发现它工作正常。
那是因为你将承诺传递给res.send
。
res.send(/* You are passing a promise here */);
你应该做的是等待承诺与数据解决,然后发送数据:
getPlayerStats.getPlayerId(req.query.name).then(function(data) { res.send(data); });
我总是build议用catch()
来完成你的承诺链,以确保处理错误:
getPlayerStats.getPlayerId(req.query.name) .then(function(data) { res.send(data); }) .catch(function(error){ res.status(500).send('Some error text'); });
当你编写中间件的时候,听起来你想让玩家id可用于其他动作,所以除了这里的其他评论:
app.get('/player/*', function(req, res, next) { //data i want to return getPlayerStats.getPlayerId(req.query.name))).then(function(id){ res.locals.playerId = id; next(); }); }); app.get('/player/action', function(req, res){ res.send(res.locals.playerId); //or use it for further processing });