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:
Ce qui suit est le stream de contrôle entre navigateur, proxy Nodejs et CDAP,
Le proxy Nodejs est exécuté sur localhost: 8500
L’instance CDAP est en cours d’exécution sur localhost: 10000
Navigateur:
Nodejs proxy:
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); });