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

时间:2016-10-20 20:24:26

标签: javascript node.js express promise

我是nodejs的新手,这可能看起来非常简单,但我无法从返回promise的函数中检索数据。中间件的响应被发送回前端。这是我的代码

// 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()中打印出数据,我发现它工作正常。

3 个答案:

答案 0 :(得分:3)

那是因为你将承诺本身传递给res.send

res.send(/* You are passing a promise here */);

您应该做的是等待承诺解析数据,然后发送该数据:

getPlayerStats.getPlayerId(req.query.name).then(function(data) {
  res.send(data);
});

答案 1 :(得分:1)

我总是建议您使用catch()完成承诺链,以确保处理错误:

getPlayerStats.getPlayerId(req.query.name)
  .then(function(data) {
    res.send(data);
  })
  .catch(function(error){
    res.status(500).send('Some error text');
  });

答案 2 :(得分:0)

当您编写中间件时,听起来您希望玩家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
});