gpt4 book ai didi

dart - 如何使用 Dart http_server :VirtualDirectory

转载 作者:行者123 更新时间:2023-12-04 04:29:39 25 4
gpt4 key购买 nike

我一直在用dart:route api 用于提供静态文件,但我注意到有一个名为 http_server 的核心库包含 dart:io 的辅助类和函数HttpServer .

我特别感兴趣的是类(class) VirtualDirectory根据文档,它为目录的静态内容获取一个字符串对象,然后调用方法 serve()

var virtualDirectory = new VirtualDirectory('/var/www/');
virtualDirectory.serve(new HttpServer('0.0.0.0', 8080));

这不起作用,因为 HttpServer 没有构造函数 - 至少在当前版本中没有。

virtualDirectory.serve(HttpServer.bind('0.0.0.0', 8080));

virtualDirectory.serve() 以来,我一直在实例化服务器的方式也失败了不需要 Future<HttpServer>最后:

virtualDirectory.serve(HttpServer.bind('0.0.0.0', 8080).asStream());

也失败了
无法将参数类型“Stream”分配给参数类型
'溪流'

那么如何将 VirtualDirectory 连接到服务器?我在网上找不到任何示例,VirtualDirectory 源代码也没有说清楚。如果我可以 FTFM,我会 RTFM。链接很好作为答案。

最佳答案

VirtualDirectory可以从 HttpServer.bind 返回的 Future 内部工作.您可以使用以下五行代码创建静态文件 Web 服务器:

HttpServer.bind('127.0.0.1', 8888).then((HttpServer server) {
VirtualDirectory vd = new VirtualDirectory('../web/');
vd.jailRoot = false;
vd.serve(server);
});

您可以通过解析 URI 并在提供文件之前提取服务请求来使其更加复杂。

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

main() {

handleService(HttpRequest request) {
print('New service request');
request.response.write('[{"field":"value"}]');
request.response.close();
};

HttpServer.bind('127.0.0.1', 8888).then((HttpServer server) {
VirtualDirectory vd = new VirtualDirectory('../web/');
vd.jailRoot = false;
server.listen((request) {
print("request.uri.path: " + request.uri.path);
if (request.uri.path == '/services') {
handleService(request);
} else {
print('File request');
vd.serveRequest(request);
}
});
});
}

关于dart - 如何使用 Dart http_server :VirtualDirectory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20295603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com