Proxy côté serveur utilisant Node.js

J’essaie de créer une application Web qui doit effectuer un appel REST vers un serveur CDAP. Quand j’ai essayé d’utiliser le jQuery / AJAX typique, je rencontrais le problème CORS / Access-Control-Allow-Origin en raison de la raison évidente pour laquelle il s’agirait d’une requête entre domaines. Malheureusement, CDAP ne supporte pas CORS.

Maintenant, la seule option qui me rest est de créer un proxy côté serveur. Voici la configuration:

  • Nodejs expose un sharepoint terminaison générique (/ rest / *) pour tous les appels du navigateur.
  • Navigateur effectuant tous les appels sur le proxy de noeud pour les ressources cdap.

Ce qui suit est le stream de contrôle entre navigateur, proxy Nodejs et CDAP,

  • Navigateur
    • Appelle (http) au proxy de noeud.
  • Serveur Nodejs
    • Reçoit les appels http du navigateur et modifie l’URL de manière appropriée pour faire la même demande au backend CDAP.
    • Obtient une réponse de CDAP pour la requête ci-dessus et la renvoie au client.

Le proxy Nodejs est exécuté sur localhost: 8500

L’instance CDAP est en cours d’exécution sur localhost: 10000

Navigateur:

  • Créer une nouvelle application dans JS (l’URL étant – http: // localhost: 8500 / rest / v3 / namespaces / default / apps / S3Text )

Nodejs proxy:

  • Reçoit cette demande et modifie l’URL en – http: // localhost: 10000 / v3 / namespaces / default / apps / S3Text et adresse une demande au backend CDAP.
  • Une fois qu’il a reçu une réponse du backend de cdap, il ré-achemine la réponse au client.

L’équivalent curl de cet appel REST est présenté ci-dessous:

curl -v localhost: 10000 / v3 / namespaces / default / apps / S3Text -H “Type de contenu: application / json” -d @ new.json -X PUT

Je suis nouveau sur Node.js mais j’ai lu de la documentation et visionné quelques vidéos. Le moment où je suis bloqué est la partie dont j’ai besoin pour charger le fichier JSON et d’autres parameters tels que méthode, data, type de données, etc. S’agira-t-il du code JS ou du code du serveur proxy Node.js? S’il doit être inséré dans le code nodeProxy.js, où et comment dois-je les transmettre? Mes excuses si je suis naïf.

Code JS:

function sendCurlRequest(){ var jsonData = ; $.ajax({ cache : false, method: "PUT", crossDomain: true, url: 'http://localhost:8500/rest/v3/namespaces/default/apps/S3Text', data: jsonData, dataType: "json", contentType: "application/json", success: function(data){ alert("Success"); }, error: function(data){ alert("Error: " + JSON.ssortingngify(data)); }, complete: function(data){ console.log("Call Completed"); } }); } 

code nodeProxy.js:

 var http = require('http'); var httpRequest = require('request'); var destinationURL = 'http://localhost:1000/v3/namespaces/default/apps/S3Text'; http.createServer(function (req, res) { var options = { url: destinationURL } var destinationResponse = req.pipe(request(options))destinationResponse.pipe(res) }).listen(8500, 'localhost'); console.log('Server running at http://localhost:8500'); 

Si vous souhaitez utiliser certains modules Node, cela peut fonctionner, mais je ne pense pas que votre URL changera de localhost:8500/rest/v3 à localhost:10000/v3 . Le /rest/ restra dans.

JS

 return $http.get("http://localhost:8500/rest/v3/namespaces/default/apps/S3Text") return $http.post("http://localhost:8500/rest/v3/namespaces/default/apps/S3Text/other", availReqObj); 

Nœud

 var express = require('express'); var app = express(); var cors = require('cors'); var proxy = require('http-proxy-middleware'); var port = process.env.PORT || 8500; app.use(express.static("" + __dirname)); app.use(cors()); app.use('/rest/v3/namespaces/default/apps/S3Text', proxy({target: "http://localhost:10000", changeOrigin: false, logLevel: 'debug' }) ); app.use('/rest/v3/namespaces/default/apps/S3Text/other', proxy({target: "http://localhost:10000", changeOrigin: false, logLevel: 'debug' }) ); app.listen(port, function() { console.log("Listening at " + port); });