从承诺中返回数据到中间件

我是新的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 });