2014-10-20 49 views
1

我剛開始學習飛鏢,而我想做的練習是使用簡單的網絡服務器提供默認的Web應用程序。我將服務器存儲在E:\DartProject\server和網絡客戶端E:\DartProject\WebClient。不幸的是,我無法讓服務器爲Web應用程序提供服務。對Web服務器的代碼是使用飛鏢服務示例網站

import 'dart:io'; 
import 'package:http_server/http_server.dart' show VirtualDirectory; 


VirtualDirectory virDir = new VirtualDirectory("E:\DartProject\WebClient\web"); 

void main() { 
    HttpServer.bind(InternetAddress.ANY_IP_V4, 80).then((server) { 
    print("Serving at ${server.address}:${server.port}"); 
    server.listen((request) { 
     virDir.serveRequest(request); 
    }); 
    }); 
} 

我總是得到404錯誤。我做錯了什麼?

回答

2

您的路徑中的反斜槓可能被解釋爲轉義字符?

嘗試更改"E:\DartProject\WebClient\web"r"E:\DartProject\WebClient\web",它將指示Dart逐字地解釋整個字符串。

例如,如果您預計/服務於/index.html,則還需要configure a "default document"

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

void main() { 
    virDir = new VirtualDirectory(r"E:\DartProject\WebClient\web") 
    ..allowDirectoryListing = true 
    ..directoryHandler = directoryHandler; 

    HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 8080).then((server) { 
    print("Serving at ${server.address}:${server.port}"); 
    server.listen((request) { 
     virDir.serveRequest(request); 
    }); 
    }); 
} 
+0

謝謝@DannyTuppeny。不幸的是它仍然不起作用。我在'virDir.serveRequest(request);'下添加了'print('test')',每次我點擊刷新它寫入測試,但它不會提供webclient。任何其他想法? – Lukasz 2014-10-21 06:27:31

+0

你是否將它賦予一個文件的一部分,或期望它默認爲某些東西(如index.htm)? – 2014-10-21 06:41:44

+0

@Lukasz查看如何獲得'/'映射到'/ index.html'的更新答案,假設這可能是什麼問題。 – 2014-10-21 07:55:15