web服务加入静态资源支持

This commit is contained in:
2026-04-11 10:20:10 +08:00
parent 9735def8a6
commit 8c5aee049d
5 changed files with 50 additions and 6 deletions

View File

@@ -1,5 +1,7 @@
library EasyDartModule;
import 'dart:async';
import 'package:EasyDartModule/base/database/DataBase.dart';
import 'package:EasyDartModule/base/database/impl/MongoDb.dart';
import 'package:EasyDartModule/base/discovery/Discovery.dart';
@@ -88,4 +90,18 @@ class EasyDartModule {
}
return true;
}
static void safeRun(Function() app, {Function(Object, StackTrace)? onError}) {
runZonedGuarded(
app,
(error, stack) {
if (onError != null) {
onError(error, stack);
} else {
print('Caught in zone: $error');
print("StackTrace: $stack");
}
},
);
}
}

View File

@@ -13,7 +13,8 @@ abstract class WebServer {
void start(int port,
{Response? Function(Request, Map<String, dynamic>)? interceptor,
Future<TokenResult> Function(String?)? tokenCheck});
Future<TokenResult> Function(String?)? tokenCheck,
StaticInfo? static});
void stop();
void addHandler(handler);
}
@@ -76,3 +77,9 @@ class TokenResult {
Map<String, dynamic>? payload;
TokenResult({required this.status, this.errMsg, this.payload});
}
class StaticInfo {
String path;
String root;
StaticInfo({this.path = "web", this.root = "index.html"});
}

View File

@@ -8,6 +8,7 @@ import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf_static/shelf_static.dart';
import 'package:shelf_web_socket/shelf_web_socket.dart';
import 'package:uuid/uuid.dart';
@@ -159,12 +160,18 @@ class ShelfWebServer implements WebServer {
@override
void start(int port,
{Response? Function(Request, Map<String, dynamic>)? interceptor,
Future<TokenResult> Function(String?)? tokenCheck}) async {
Future<TokenResult> Function(String?)? tokenCheck,
StaticInfo? static}) async {
var pipeline = Pipeline()
//生成请求id
.addMiddleware(requestIdMiddleware())
//api日志记录
.addMiddleware(logRequests());
.addMiddleware(logRequests())
.addMiddleware(createMiddleware(responseHandler: (response) {
var headers = {...response.headers, "X-Frame-Options": "ALLOWALL"};
// headers.remove("X-Frame-Options");
return response.change(headers: headers);
}));
//添加自定义拦截器
if (interceptor != null) {
this.interceptor = interceptor;
@@ -172,9 +179,20 @@ class ShelfWebServer implements WebServer {
if (tokenCheck != null) {
this.tokenCheck = tokenCheck;
}
final handler = pipeline.addHandler(_routerHandler);
var handler;
if (static != null) {
var cascadeHandler = Cascade()
.add(_routerHandler)
.add(createStaticHandler(static.path, defaultDocument: static.root))
.handler;
handler = pipeline.addHandler(cascadeHandler);
print("HTTP Server Static File Path: ${static.path}");
}else{
handler = pipeline.addHandler(_routerHandler);
}
_server = await serve(handler, InternetAddress.anyIPv4, port);
print('Server listening on port ${_server?.port}');
print('HTTP Server Listening On Port ${_server?.port}');
}
@override

View File

@@ -7,7 +7,9 @@ class ShelfWebServer implements WebServer {
ShelfWebServer(this.logger);
@override
void start(int port,
{Function? interceptor, Function(String?)? tokenCheck}) async {}
{Function? interceptor,
Function(String?)? tokenCheck,
StaticInfo? static}) async {}
@override
void stop() {}

View File

@@ -16,6 +16,7 @@ dependencies:
shelf_router: ^1.1.4
shelf_web_socket: ^2.0.1
shelf_multipart: ^2.0.1
shelf_static: ^1.1.3
uuid: ^4.5.1
mqtt5_client: ^4.11.0
minio: ^3.5.7