2017-09-19 3 views
0

Je ne suis pas sûr de ce que le problème est mais je pense que je dois faire async ou promesse basée (idk comment). Je veux simplement passer le rappel au serveur http sur res.end. Quelqu'un peut-il vous aider s'il vous plaît?Passer la valeur de http.request ou superagent à http.createServer NodeJs

HTTP Request ou SuperAgent transmet la valeur à la fonction ci-dessous. Comment envoyer ceci à http.createserver?

function receiveCallback(link) { 
    console.log(link); 
    //this works fine, echos the LINK we want to 302 to 
} 

Comment passer lien vers le serveur http?

http.createServer(function (req, res) { 
    res.writeHead(302, {'Location': link}); 
    res.end(); 
}).listen('8080'); 

Ex. L'utilisateur ouvre domain.com/test? somevar

somevar est envoyé à superagent qui produit alors un lien

Comment 302 l'utilisateur au lien

+0

Can 'receiveCallback()' peut être appelé plusieurs fois, ou juste une fois au début? – gregnr

+0

Plusieurs fois. Fondamentalement, le serveur transmet le chemin de l'URL au super-agent, qui génère alors un lien vers lequel le serveur doit se rendre. – JsEveryDay

+0

Presque comme https://stackoverflow.com/questions/14243100/response-writehead-and-response-end-in-nodejs mais comment insérer mon lien/rappel dans la fonction. – JsEveryDay

Répondre

1

Si votre superagent fait sa propre demande chaque fois que le serveur reçoit une requête, il ressemblerait à quelque chose comme ceci:

const http = require('http'); 
const url = require('url'); 
const request = require('superagent'); 

http.createServer((req, res) => { 

    const queryParams = url.parse(req.url, true).query; 

    request 
     .get('/get/my/link') 
     .send({ somevar: queryParams.somevar }) 
     .end((err, response) => { 

      if (err) 
       throw err; 

      const link = response.body.link; 

      res.writeHead(302, { 'Location': link }); 
      res.end(); 
     }); 

}).listen('8080'); 
+0

Vous ne pouvez pas appeler res.writeHead ou res.end dans une autre fonction. J'ai déjà essayé. Console: TypeError: res.writeHead n'est pas une fonction. C'est pourquoi j'ai réécrit le code super-agent en http pur et les mêmes résultats. – JsEveryDay

+0

Essayez ce lien sur votre demande d'obtention. Vous devriez finir sur google.com mais cela ne fonctionne pas. http://www.mocky.io/v2/59c17f8b1300005605d29e24 – JsEveryDay

+0

Correction d'une erreur où il y avait 2 variables 'res' dans la même portée. Tout devrait fonctionner maintenant. Gardez à l'esprit ceci est juste un exemple que je suis venu avec - il s'attend à une réponse comme ceci: http://www.mocky.io/v2/59c1874d130000b805d29e33 – gregnr