내 첫 번째 질문에 stackoverflow;).Node.js : url에 대한 익스프레스 라우트를 사용하여 프록시에 프록시로
내가 수행하려고 할 것 : 내가 명시 적 경로 "/ 패드/*"etherpads을 표시하려면 (etherpad 라이트)를 사용하고 사용자가 표시되는 내용 패드를 조작 할 수 있습니다. 그래서 "/ pad/p/something"을 얻으면 "무언가"가 처리되고 그에 따라 실제 ID로 변경됩니다. "XYZ". 따라서 사용자는 올바른 패드를 편집 할 수 있습니다. 그러나, etherpad 정적 물건과 WebSocket을 많이 필요, 따라서 나는 프록시 그것을 원하고, 내가
에 최소한의 작업 예를해야하는 경우 ID를 조작 : 물론 이 ID의 변화의 실제 논리는 훨씬 더 복잡하지만, 최소한의 작업 예제에서는 모든 padID가 "a"에 매핑된다는 논리 만 사용합니다.
나는이 함께했다 :/* packages */
var express = require("express");
var http = require("http");
var httpProxy = require('http-proxy');
/* app */
var app = express();
app.use(app.router);
/* some express logic */
app.get('/' , function(req , res) {
res.end("hello world");
});
/* the proxy */
var padProxy = httpProxy.createProxyServer({});
padProxy.on('error', function (err, req, res) {
res.writeHead(500, {
'Content-Type': 'text/plain'
});
res.end('some error');
});
app.all('/pad/*' , function(req , res) {
var url = req.url;
url = url.slice(4)
/*WHY DOES THIS NOT WORK????*/
if(url.slice(0,3) === '/p/') {
url = "/p/a"
};
req.url = url;
return padProxy.web(req, res , { target: "http://<etherpad server ip>:<etherpad server port>" });
})
/* run */
http.createServer(app).listen(3000 , function(){
console.log("started");
});
문제점 :는 URL 변화와 프록시 실제로 종류의 ... 작동합니다. 모든 URL은 패드, 정적 물건 및 웹 소켓에서 작동하는 모든 URL 앞의 "/ 패드"를 제거하도록 매핑됩니다. 하지만 패드 ID의 매핑이 작동하지 않습니다. "localhost : 3000/pad/p/a"를 보면 "a"-pad가 표시됩니다. "localhost : 3000/pad/p/b"를 보면 "b"- 패드가 있는데, 의도하지 않은 것입니다. /.
내가 뭘 잘못하고 있니? 이것은 노드 -http-proxy, express 또는 etterpad-lite 문제입니까?
모든 힌트를 환영합니다.
""localhost : 3000/pad/p/a "를 보면"a "- 패드가 보입니다."localhost : 3000/pad/p/b "를 보면"b "- 내가하려는 의도가 아닌 패드", 그럼 무엇을 원하니? – Ravi
"url ="/ p/a " '로 URL을 변경하려고하면"a "-pad를보고 싶습니다. – Wilm
'console.log (url.slice (0,3))'('if (url.slice ....') 이전에 브라우저 콘솔에 출력됩니까?) – Ravi