2017-11-15 9 views
0

.NET 환경에서 빌드 된 AngularJS 응용 프로그램을 테스트하기 위해 NodeJS 서버를 임시 해결책으로 사용하려고합니다. (Mac에서 사용). 두 앱 모두 <base> 태그를 사용하고 web.config에 404의 새로 고침 등을 방지하기위한 규칙을 다시 작성했습니다.NodeJS 서버 - 여러 URL 다시 쓰기 구성

잠재적 인 접근 방법은 here으로 논의되었지만 여러 규칙을 포함하도록 예제를 업데이트하는 데 문제가 있습니다.

|-- global (both apps use assets located inside of global) 
|-- apps 
    |-- myApp1 
    |-- myApp2 

애플 리케이션 자체가 상대가 모든 자산에 대한 경로를 근절하기 위해 사용

내가 시험에 노력하고있어디렉토리 구조는 다음과 같이 보인다. 따라서, 예를 들어 :

myApp1 :

/global/images/image.jpg /apps/myApp1/images/image.jpg /apps/myApp1/css/styles.css /apps/myApp1/js/scripts.js 

다음과 같은 규칙

의 Web.config에 묘사되어

<rule name="AngularJS Route for myApp1" stopProcessing="true"> 
     <match url="^myApp1/.*" /> 
     <conditions logicalGrouping="MatchAll"> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/apps/myApp1/default.aspx" /> 
    </rule> 
    <rule name="AngularJS Route for myApp2" stopProcessing="true"> 
     <match url="^myApp2/.*" /> 
     <conditions logicalGrouping="MatchAll"> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/apps/myApp2/default.aspx" /> 
    </rule> 

두 응용 프로그램은 각각의를 사용하여 액세스 할 수 별칭 :

그래서, 위와 같이 매우 간단한 nodejs 서버를 만들려고합니다. 제작 준비 서버를 실행할 무언가를 찾고 있지 않습니다. 이 클라이언트가 테스트 할 물건을 보내면 언제든지 내가 할 수있는 일이 있습니다.

나는 사람 above과 같은 몇 가지 링크에서 찾기 시작하지만 아래의 코드를 사용하여 여러 재 작성 함께 할 수있는 방법을 알아내는 힘든 시간을 보내고 있어요 :

server.js를

const express = require('express'); 
const app = express(); 

app.use((req, res, next) => { 
    if (req.url === 'myApp1') { 

     //what do I do here? 
     //tell it to reference the orig path? 

     req.url = '/apps/myApp1/'; 

     //or do I use the router approach that's discussed in my reference link above? 
    } 

    next(); 
}); 

app.use(express.static(__dirname + '/')); 

app.listen(3000,() => { 
    console.log('Listening on port 3000') 
}); 

이 질문은 많은 질문이있는 것처럼 보입니다.하지만 여러 개의 재 작성에 적용된 것을 아직 보지 못한 채로 두 앱이 모두 가져 오는 공유 된 글로벌 디렉터리를 염두에 두어야합니다. 누구든지 전에 이런 걸해야만 했어?

답변

0

내가 알아 냈다고 생각해. 앞으로이 문제를 바라는 사람들을위한 나의 해결책이 있습니다. 그것이 최선의 방법인지 확실하지 않지만 나를 위해 일하는 것 같습니다 :

const express = require('express'); 
const path = require('path'); 
const router = express.Router(); 
const app = express(); 

const static = router.use('/', express.static(__dirname + '/', { redirect: false })); 

const app1 = router.get('/myApp1*', (req, res, next) => { 
    res.sendFile(path.resolve('apps/myApp1/index.html')); 
}); 

const app2 = router.get('/myApp2*', (req, res, next) => { 
    res.sendFile(path.resolve('apps/myApp2/index.html')); 
}); 

app.use(static, app1, app2); 

app.listen(3000,() => { 
    console.log('Listening on port 3000'); 
});