我有一个简单的 Dart HTTPServer 正在运行,virDir.serveRequest(request);
它为 URL提供请求,192.168.1.200:8080/index.html
但404 Not Found
如果我使用192.168.1.200:8080
or则提供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。