Apache의 mod_rewrite가 수행하는 Node.js와 동일한 모듈이 있습니까? 동일한 기능을 제공하는 표준 언어 구문이 있습니까?node.js에 해당하는 아파치 mod_rewrite?
저는 Node를 시작하고 서버를이 플랫폼으로 변환하려고합니다.
Apache의 mod_rewrite가 수행하는 Node.js와 동일한 모듈이 있습니까? 동일한 기능을 제공하는 표준 언어 구문이 있습니까?node.js에 해당하는 아파치 mod_rewrite?
저는 Node를 시작하고 서버를이 플랫폼으로 변환하려고합니다.
이전 답변에서 제안한대로 직접 작성해야합니다. 이전의 두 가지 대답은 특별히 다른 경로를 다루는쪽으로 더 지향되었습니다.
내 node reverse proxy은 재 작성 규칙을 처리하기위한 많은 코드가 있으므로 도움이 될 수 있습니다. 이것은 "/ people/([az] *)"와 같은 규칙을 비교하고 매우 유사한 "/cgi-bin/index.cgi?user=$1"로 리디렉션 할 수 있기 때문에 이전 답변과 다릅니다. mod_rewrite로.
NodeJS로 실행되는 HTTP 서버가있는 경우 두 개의 객체, 요청 및 응답이 있습니다. 요청에 요청 된 URL이 포함되어 있습니다. require ('url')를 사용하면 요청한 url을 구문 분석하고 예를 들어 요청 된 경로 이름을 얻을 수 있습니다.
그럼 어떻게 할 것인가는 분명히 자신의 코드에 달려 있습니다. 당신이 http://127.0.0.1:1337/foo/bar와
var http = require('http');
http.createServer(function (req, res) {
var requestedURL = require('url').parse(req.url);
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write("You requested " + requestedURL.pathname + "\n");
res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
을 테스트 할 수있는 : 그래서 당신은이 같은 끝낼 것 www.nodejs.org의 기본 예에 따라. requestedURL.pathname
을 사용하여 원하는 작업을 결정할 수 있습니다. 직접 작성하거나 제 3 자 라우팅 라이브러리를 사용하는 것이 가장 이상적입니다. ExpressJS는 많은 것들을 처리하는 데 도움이 될 수있는 꽤 유명한 NodeJS 프레임 워크이지만 사용할 수있는 경험이 없습니다.
더 많은 정보 :
사람이 설명 할 수로 변경됩니다? 그게 뭐가 잘못 됐어? .. – CharlesLeaf
+1 CharlesLeaf에게 감사드립니다. 매우 낮은 수준이지만 매우 유용합니다. – ampersand
질문에 대한 자연스러운 대답이 아니기 때문에 용의자입니다.하지만 여전히 유용한 응답이라고 할 수 있습니다. –
라우터는 실제로 "다시"하지 않기 때문에 당신이 기술적 아니지만 (동등한를 찾고 있다면 무엇이든) 거기에는 많은 라우터가 있습니다. (Express가 내장이되는) 가장 두드러진 연결 라우터 : https://github.com/senchalabs/connect이
그것은 다음과 같이 보일 것입니다 :
app.get('/', function(req, res) {
res.end('hello, here is the home page.');
});
그것은에,하지만 주위에 먼저 낮은 수준의 HTTP 인터페이스와 혼란에 더 좋을 수도 그것을 위해 좋은 느낌을 얻으십시오.
좋은 modrewrite 라이브러리를 찾고 계시다면. 봐야 할 수도 있습니다 connect-modrewrite
다시 쓰기 모듈이 있습니다. 또한 미들웨어에서 다른 프록시 모듈과 함께 사용할 경우 역방향 프록시로 함께 작동합니다. 내 로컬 상자에서 단일 페이지 응용 프로그램을 개발하는 동안
내가 그들을 사용 (그래서 구성해야 그나마 아파치/nginx를 로컬)
이 CORS를 방지하고 (JS/CSS/이미지 제외) 모든 페이지를 보내려면 SPA가 작동하려면 index.html로 이동하십시오.나는 그것이 다시 및 규칙의 나머지를 건너 뛰고 싶어서 [L]
플래그를 사용
var connect = require('connect');
var modRewrite = require('connect-modrewrite');
var proxy = require('proxy-middleware');
var url = require('url');
var app = connect()
.use(modRewrite([
"^\/api\/(.*) /send-to-api/api/$1 [L]",
"^(.*)\/css\/(.*) /send-to-ui/css/$2 [L]",
"^(.*)\/js\/(.*) /send-to-ui/js/$2 [L]",
"^(.*)\/images\/(.*) /send-to-ui/images/$2 [L]",
"^(.*)\/fonts\/(.*) /send-to-ui/fonts/$2 [L]",
"^(.*) /send-to-ui/index.html [L]"
]))
.use('/send-to-api', proxy(url.parse('http://api.server.dev/'))) // Don't forget the last backslash
.use('/send-to-ui', proxy(url.parse('http://ui.server.dev/'))) // Don't forget the last backslash
.listen(9000)
확인합니다.
이 경우 /api
URL 만 api.server.dev
으로 프록시되고 나머지는 ui.server.dev
이됩니다. URL 접두사 /send-to-api
및 /send-to-ui
은 임시적이며 어떤 위치로 갈지 구분하기 위해 사용합니다. connect
에 의해 제거 된 후 해당 서버로 전송됩니다.
그리고 네, 리디렉션의 경우, proxy-middleware
는 Location
헤더 내 대답이 -1'd 된 이유 localhost:9000
이
+1 이것은 정규식을 사용하는 것과 mod_rewrite가 더 비슷합니다. 고마워, 스티브. 나는 그것을 시험해 보겠다. – ampersand
이 npm/this일까요? 나는 npm을 사용하는 것이 더 쉽다는 것을 안다. 또한 npm을 사용하는 Node.js 호스팅 제공 업체 중 일부를 사용하여 종속성 문제를 해결하려면이 방법을 사용할 수 없습니다. 나는 그것을 코드로 다시 패키징 할 필요가 없다. – ampersand
나는 npm을 고려하지 않았습니다. 주로 라이브러리가 아닌 "스크립트"또는 "바이너리"로 설계 되었기 때문입니다. 그러나 다른 사람들로부터 관심이 있다면 그것은 바뀔 수 있습니다! –