dart HTMLrequest默认为index.html不起作用

时间:2014-06-05 17:00:10

标签: dart dart-io

我运行了一个简单的Dart HTTPServer,它为virDir.serveRequest(request);提供的请求适用于网址192.168.1.200:8080/index.html,但如果我使用404 Not Found192.168.1.200:8080则会提供192.168.1.200:8080/ }。我可能很天真,虽然默认是自动的。顺便说一句,这对我来说都是新手。

我没有注意到HTMLServer中的任何默认设置,这是如何实现的?

(编辑)

我已经能够使用默认值检测使用情况并计算正确的文件名,但不了解如何将其传递到浏览器:

_processRequest(newPath, request) { // new path is index.html
  File file = new File(newPath);
  file.exists().then((found) {
    if(found) {
      file.openRead().pipe(request.response);  // probably dies here
      }
    else {
     _send404(request.response);
    }
   });
}

[编辑]

仍然无法提供index.html文件。我尝试过使用VirtualDirector.serveFile()但是当我尝试处理默认的index.html文件时无法使其工作。我一直试图效仿。

final HTTP_ROOT_PATH = Platform.script.resolve('../web').toFilePath();
final virDir = new VirtualDirectory(HTTP_ROOT_PATH)
  ..jailRoot = false  // process links will work
  ..followLinks = true
  ..allowDirectoryListing = true;

var dir = new Directory(virDir.root);
var indexUri = new Uri.file(dir.path).resolve('/index.html');
virDir.serveFile(new File(indexUri.toFilePath()), request);

当我运行它并打印indexUri.toFilePath()时输出是'/index.html'

我的代码位于/ srv / fireimager / bin和/ srv / fireimager / web中,后者是虚拟目录根目录。当我检测到用户没有在url中指定/index.html它不起作用时,没有发出错误,并且javascript控制台没有显示任何内容,因此没有任何内容提供给浏览器。

我显然不明白如何使用VirtualDirectly.serveFiler。

1 个答案:

答案 0 :(得分:0)

您的默认页面或index.html不是由浏览器承担,而是由服务器承担。

您要做的是检查您的请求的结尾。在我的服务器中,我检查它是否以" /"结尾。如果它以" /"结尾,我打开并发送我的默认页面。

此外,您需要确保检查您的请求,以确保它不会尝试访问它不想要的区域。检查" .."在您的路径段中。如果你有,你可能想要终止连接。