[英]Server Side Proxy using Node.js
我正在嘗試創建一個Web應用程序,該應用程序必須對CDAP服務器進行REST調用。 當我嘗試使用典型的jQuery / AJAX時,由於明顯的原因(這將是跨域請求),我遇到了CORS / Access-Control-Allow-Origin問題。 遺憾的是,CDAP不支持CORS。
現在,唯一剩下的選擇就是創建服務器端代理。 以下是設置:
以下是瀏覽器,Nodejs代理和CDAP之間的控制流程,
Node.js代理在本地主機上運行:8500
CDAP實例正在localhost:10000運行
瀏覽器:
Node.js代理:
該REST調用的curl等效項如下:
curl -v本地主機:10000 / v3 /命名空間/ default / apps / S3Text -H“內容類型:application / json” -d @ new.json -X PUT
我是Node.js的新手,但已閱讀一些文檔,並看了一些視頻。 卡住的地方是我需要加載JSON文件和其他參數(如方法,數據,dataType等)的哪一部分。它將在JS代碼中還是在Node.js代理服務器代碼中。 如果必須輸入nodeProxy.js代碼,那么我需要在哪里以及如何傳遞它們? 如果我天真,我會道歉。
JS代碼:
function sendCurlRequest(){
var jsonData = <JSON_DATA>;
$.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.stringify(data));
},
complete: function(data){
console.log("Call Completed");
}
});
}
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');
如果您願意使用某些Node模塊,那么這可能會起作用,盡管我認為它不會將您的URL從localhost:8500/rest/v3
更改為localhost:10000/v3
。 /rest/
將保留。
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);
節點
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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.