2016-10-20 3 views
1

저는 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()에서 데이터를 인쇄 할 수 있고 잘 동작하는 것을 볼 수있다.

+0

당신은 나중에 결과를 반환 비동기 메서드에'res.send'를 호출 할 수 없습니다, 당신은 – adeneo

답변

3

왜냐하면 당신은 res.send에 약속 자체를 전달하기 때문입니다. 당신이 미들웨어를 쓸 때 당신이 플레이어 ID가 사용 가능하게하려면 같은

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

감사 nem035 비동기 메서드에 대한 콜백 내에서 보낼 수 있습니다! 나는 그것을했고 그것이 효과가있다! – inhaler

+0

@inhaler 문제 없습니다. 친구, 도와 줘서 기쁩니다. 여기에 유용한 리소스 ([this one] (http://stackoverflow.com/documentation/javascript/231/promises#t=201610202030578009337)와 [this one] (https://developer.mozilla.org/en-US)가 있습니다./docs/Web/JavaScript/Reference/Global_Objects/Promise) 약속에 대한 자세한 내용을 보려면 – nem035

0

소리가 난다 : 당신이 무엇을해야

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

는 약속이 데이터를 해결하고 그 데이터를 보낼 때까지 기다릴 것입니다

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 
}); 
+0

이 프로젝트의 다른 부분을 작업하기 시작하면 분명히 매우 유용 할 것입니다. 고마워! – inhaler

1

그리고 난 항상 확인 오류를 확인하기 위해 catch()와 약속 체인을 완료하는 것이 좋습니다 처리됩니다 : 여기에 다른 의견뿐만 아니라, 그래서 다른 작업

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