2012-02-27 6 views
1

내가 노드에서 실행 Expressjs를 사용하여 응용 프로그램을 만드는거야을 가지고 할 (즉 창에). // 내 사이트 :이유는 무엇 <strong>IISNode</strong>에서 접두사 내 모든 경로 처리기

backend.configure(function() { 
    backend.register('html', { 
     compile: function(str, options) { 
     return function(locals) { 
      return str; 
     }; 
     } 
    }); 
    backend.set('views', __dirname + '/views'); 
    backend.set('view engine', 'html'); 
    backend.set('view options', { 
     layout: false 
    }); 
    backend.use(express.bodyParser()); 
    backend.use(backend.router); 
    backend.use(express.static(__dirname + '/public')); 
    }); 

내 사이트가 로컬 호스트에서 실행 말할 수 있습니다 :

나는 모든 expressjs처럼 매우 예 내가 본 물건을 설정하여 시작합니다. 다음과 같이 경로 처리기를 모두 만들어야합니다.

backend.get('/mysite/index', function(req, res, next) { 
    return res.render('index'); 
    }); 

즉, 나는 모두 "mysite"로 시작해야합니다. 필자가 본 적이없는 예제는 이것을 필요로하지 않습니다. 이것은 IISNode 또는 내가 구성하지 않은 다른 것과 관련이 있습니까?

답변

1

기본적으로이 작업을 수행해야합니다. 당신은 express-resource을 들여다 보며 리소스가 풍부한 라우팅을 가능하게 할 수 있습니다.하지만 적어도 경로 별 미들웨어에 관해서는 자신의 경고가 있습니다.

경로가 하나뿐이라면 app.set("basepath", "mysite")으로 처리 할 수 ​​있다고 생각합니다.

+1

감사 리누스를 호출처럼 보이는, 내가 app.set ("basepath", "내 사이트"어떤 행운을하지 않았다 것). 익스프레스 리소스를 살펴 보았지만 관련 [질문] (http://stackoverflow.com/questions/4375554/is-it-possible-to-set-a-base-url-for-nodejs- 앱). 결국 나는 [express-namespace] (https://github.com/visionmedia/express-namespace)로 갔다. Windows [https://github.com/visionmedia/express-namespace/issues/11]에 문제가 있지만 express-namespace node_modules 폴더에서 index.js 파일을 수정하면 쉽게 수정할 수 있습니다. –

0

iisnode를 사용하여 IIS에 배포 할 때 익스프레스 응용 프로그램을 수정하지 않으려면 사이트 아래의 가상 디렉터리보다는 IIS WebSite의 루트에 배포해야합니다.

+0

전체 애플리케이션 구조에 대한 불필요한 변경을 제안하는 것이 얼마나 많은 사람들이이 문제에 대한 해결책이라고 생각하는지는 충격적입니다. 이것은 "끝낼 수 없다"는 부끄러운 대답입니다. – rainabba

6

이 기능을 찾고 있었지만 API 경로는 정적 파일이 아닙니다. 내가 한 것은 라우터를 초기화 할 때 마운트 경로를 추가했기 때문입니다. 그래서 내 구성이

//Default configuration 
app.configure(function(){ 
    app.use(express.compress()); 
    app.use(express.logger('dev')); 
    app.set('json spaces',0); 
    app.use(express.limit('2mb')); 
    app.use(express.bodyParser()); 

    app.use('/api', app.router);  // <--- 

    app.use(function(err, req, res, callback){ 
     res.json(err.code, {}); 
    }); 
}); 

주목하라 '/ API'라우터

+0

이 솔루션은 빠른 응답으로 원활하게 작동합니다. 이 솔루션을 사용하는 접두사/api 아래에 API를 제공하는 여러 가지 하위 하위 응용 프로그램과 일반 웹 사이트 /가 있습니다. – diosney

관련 문제