2017-10-12 7 views
-1

Je pense que j'ai une question idiote, mais je n'ai aucune idée de comment je peux résoudre ce problème. Dans un post en express je voudrais envoyer à un autre serveur deux requêtes et j'aimerais obtenir deux réponses côté client (angulaire dans mon cas). J'essaie de faire deux res.send(body) mais je reçois une erreur Error: Can't set headers after they are sent. Et ma question: est-ce possible que ces deux réponses se jettent dans une seule réponse?Obtenez deux réponses dans un message en express

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); 
     } 
    ), 
}) 

Répondre

0

Vous ne pouvez pas envoyer deux réponses. Mais vous pouvez fusionner les deux requêtes en une seule réponse. Essayez d'utiliser des promesses:

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

Grand .... tout d'abord vous ne pouvez pas envoyer plus d'une réponse. c'est-à-dire res.sendune seule fois & une seule fois !! ...

Alors ce que vous pourriez faire est de ... faire priorité qui devrait être exécuté d'abord ... dans votre cas autoriser d'abord, puis paymethods

Ainsi, la séquence correcte serait

$.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 
      } 
    } 
} 

Séparez De même vos itinéraires ..

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

et

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