2014-10-13 4 views
3

나는 소위, 서버와 클라이언트와의 프로젝트를 가지고 (자신의 디렉토리에 각각 개별 패키지를 설정) 한 :패키지 종속성이있는 클라이언트를 서비스하도록 HTTP 서버를 설정하는 방법은 무엇입니까?

$ ls -l project/server 
pubspec.yaml 
server.dart 
packages 

$ ls -l project/client 
pubspec.yaml 
packages 
web 

$ ls -l project/client/web 
index.html 
main.css 
client.dart 

지금 내가 문제가 이외의 아무것도를 제공하는 HttpServer에 점점 데 다음 코드를 사용하여 웹 디렉토리 :

void directoryHandler(dir, request) { 
    var indexUri = new Uri.file(dir.path).resolve('index.html'); 
    virDir.serveFile(new File(indexUri.toFilePath()), request); 
} 

void main() { 
    Logger.root.onRecord.listen(new SyncFileLoggingHandler("server.log")); 

    virDir = new VirtualDirectory(Platform.script.resolve('../client/web').toFilePath()) 
    ..allowDirectoryListing = true 
    ..followLinks = true 
    ..directoryHandler = directoryHandler; 

    HttpServer.bind(InternetAddress.ANY_IP_V4, 8080).then((HttpServer server) { 
    log.info("HttpServer listening on port:${server.port}..."); 
    server.listen((HttpRequest request) { 
     if (WebSocketTransformer.isUpgradeRequest(request)) { 
     log.info("Upgraded ${request.method} request for: ${request.uri.path}"); 
     WebSocketTransformer.upgrade(request).then(handleWebSocket); 
     } else { 
     log.info("Regular ${request.method} request for: ${request.uri.path}"); 
     virDir.serveRequest(request); 
     } 
    }); 
    }); 
} 

그리고 index.html을에서 :

<script src="../packages/browser/dart.js"></script> 

VirtualDirectory를 client/web에 직접 해결하면 일반적인 정적 파일이 작동하지만 외부 (즉, 패키지 디렉토리)는 가져 오지 않습니다. 클라이언트 디렉토리 만 제공하려고하면 핸들러에서 web/index.html을 지정하면 다른 옵션은 선택되지 않습니다. 나는 또한 패키지 디렉토리를 웹에 복사하려고 시도했지만, 그 중 하나를 선택하지 않았다.

참고 : HttpServer가 빌드 디렉토리를 가리키는 다른 예제를 보았지만 jart로 다트를 컴파일하기 전에 프로젝트를 테스트하려고합니다.

전반적으로 서버가 실제로 클라이언트에 서비스를 제공하고 클라이언트에 자체 패키지가있는 서버/클라이언트 프로젝트를 설정하는 방법에 대해 혼란스러워합니다. 이 특정 사례에 대한 온라인 문헌을 찾을 수없는 것 같습니다.

답변

1

아마도 jailRootvirDir을 false로 설정하면 좋겠지 만 client/web 디렉토리를 처리하는 포인트는 무엇입니까? 클라이언트 패키지에 대해 pub build을 실행하면 심볼릭 링크가 포함되지 않은 빌드 된 코드가 생성되어 축소되고 트리밍됩니다. 다트 소스 코드는 클라이언트에게 제공되지 않아야합니다. 다트 지원 브라우저를 사용하는 경우에도 pub builddart2dart (아직 지원되지 않음)으로 소스 코드에서 실행해야합니다. 개발을 위해 사용자 지정 서버의 pub serve에 요청을 전달하는 것이 좋습니다.

+1

"파일을 찾을 수 없음"오류가 모두 해결되도록 모든 파일을 제공한다는 문제를 결코 파악하지 못했지만 서버와 클라이언트를 제안하고 분할 할 때 개발 실습을 변경했습니다. 나는 dart2dart를 아직 시도하지 않았지만, dartium에서 애플리케이션을 테스트 할 필요가 없었습니다. – Crunchex