2014-05-19 5 views
0

안녕하세요, 내 응용 프로그램의 URI를 바인딩하고 싶습니다. 예를 들어,이 시나리오를 상상해보십시오. 내가 로컬 호스트에서 접속을 시도 할 경우URI bind Express.js

I 포트 3000에 명시 응용 프로그램을 실행하고, 포트 80에서 의 nginx, 포트 URI api의 요청을 프록시 3000

그리고 특급 // Home app.get('/', function(req, res) { res.send('Hello!'); });

에이 경로를 : 3000 내 브라우저에 Hello!이 표시됩니다 (예상 됨),

로컬 호스트/api에서 액세스하려고하면 오류가 발생하지만 물론 경로를 찾을 수 없습니다. 액세스하려고 노력 중입니다.

내가 app.get을 변경하면 app.get('/api/...이 예상대로 작동하지만 원하는 것은 아닙니다 ... 전 모든 경로에 api을 앞에 추가해야합니다. 이와 같은 다른 방법이 필요합니다.

  • URI
  • URI 필터 결합 ??

필자는 설명서를 읽었지만 문제를 해결하기 위해 아무것도 찾을 수 없으며이 문제를 해결하기 위해 익스프레스에서 URI 바인딩을 수행하는 패키지를 수행하려고합니다.

답변

1

/api과 일치하는 모든 요청이 특정 익스프레스 앱을 가리킬 수있게 해주는 솔루션은 내 대답 here을 참조하십시오. 링크 된 경우, 사용자는 주요 단편없이 몇 가지 작업을 수행하기를 원했습니다. /api/ 경로에만 관심이 있으므로 기본 고속 앱의 경우 app.use(app.router)을 생략 할 수 있습니다.

<snip> 
var http = require('http'); 
var express = require('express'); 
var desktopApp = express(); 
var mobileApp = require('./mobile.js'); 

desktopApp.use('/mobile', mobileApp) 
desktopApp.use(desktopApp.router); 
</snip> 

나는 실제로 당신이 실제로 request.url을 다시 쓸 수 있다고 확신합니다. 나는 이것을 시도한 적이 없어서 그것이 작동한다는 것을 약속 할 수 없다! docs http://expressjs.com/4x/api.html#req.originalUrl도 참조하십시오. 라우팅 기능의 맨 위에 놓으십시오. 따라서 모든 후속 라우트보다 먼저 실행됩니다.

app.all('*', function(req, res, next){ 
    req.url = req.url.replace(/^\/api/, ''); 
    //the regex replaces leading /api with empty string 
    //req.originalUrl will keep the old url 
    next(); 
});