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