2017-10-12 23 views
-1

我认为我有一个愚蠢的问题,但我不知道如何解决这个问题。在一篇文章中,我希望向另一台服务器发送两个请求,并且我希望得到两个对客户端的响应(在我的情况中为角)。我试着做两个res.send(body)但我得到一个错误Error: Can't set headers after they are sent.而我的问题:这两个响应是否可能抛出并得到一个响应?在快递中的一个帖子中获得两个回复

router.post('/paynow', function(req, res){ 
    request({ 
     method: 'POST', 
     url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize', 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded', 
     }, 
     body: "xyz" 
    }, function (error, response, body) { 
      console.log('Status:', response.statusCode); 
      console.log('Headers:', JSON.stringify(response.headers)); 
      console.log('Response:', body); 
      res.send(body); 
     } 
    ) 
    request({ 
     method: 'GET', 
     url: 'https://secure.snd.payu.com/api/v2_1/paymethods/', 
     headers: { 
      'Authorization': 'xyz' 
     }}, function (error, response, body) { 
       console.log('Status:', response.statusCode); 
       console.log('Headers:', JSON.stringify(response.headers)); 
       console.log('Response:', body); 
       res.send(body); 
     } 
    ), 
}) 

回答

0

您不能发送两个响应。但是您可以将两个请求结果合并为一个响应。尝试使用承诺:

router.post('/paynow', function(req, res){ 
    Promise.all([ 
    new Promise((resolve, reject) => { 
     request({ 
     method: 'POST', 
     url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize', 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded', 
     }, 
     body: "xyz" 
     }, function (error, response, body) { 
     if (error) return reject(error) 
     resolve(body) 
     }) 
    }), 
    new Promise((resolve, reject) => { 
     request({ 
     method: 'POST', 
     url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize', 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded', 
     }, 
     body: "xyz" 
     }, function (error, response, body) { 
     if (error) return reject(error) 
     resolve(body) 
     }) 
    }) 
    ]).then(listOfResponses => { 
    res.json(listOfResponses) 
    }) 
}) 
0

伟大的....首先你不能发送多个响应。res.send一旦&只有一次! ...

所以,你可以做的是......让优先权,应首先执行......在你的情况授权paymethods

所以,正确的顺序将是

$.ajax{ 
    url : /authorize, 
    type : post, 
    data : /same data, 
    , success : function(response) { 
     //within successs make pay method request as another ajax using the 
     // response from previous authorize request 


      $.ajax{ 
       url : /paymethods, 
       data : response 
      } 
    } 
} 

同样分开你的路由..

router.post('/authorize', function(req, res){ 
    request({ 
     method: 'POST', 
     url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize', 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded', 
     }, 
     body: "xyz" 
    }, function (error, response, body) { 
      console.log('Status:', response.statusCode); 
      console.log('Headers:', JSON.stringify(response.headers)); 
      console.log('Response:', body); 
      res.send(body); 
     } 
    )} 

and

router.post('/paynow', function(req, res){ 
     request({ 
    method: 'GET', 
    url: 'https://secure.snd.payu.com/api/v2_1/paymethods/', 
    headers: { 
     'Authorization': 'xyz' 
    }}, function (error, response, body) { 
      console.log('Status:', response.statusCode); 
      console.log('Headers:', JSON.stringify(response.headers)); 
      console.log('Response:', body); 
      res.send(body); 
    } 
) 
} 
相关问题