From 8c5aee049d59e3742c6bb2abf2cb479af4c9364f Mon Sep 17 00:00:00 2001 From: qmqz Date: Sat, 11 Apr 2026 10:20:10 +0800 Subject: [PATCH] =?UTF-8?q?web=E6=9C=8D=E5=8A=A1=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E9=9D=99=E6=80=81=E8=B5=84=E6=BA=90=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/EasyDartModule.dart | 16 ++++++++++++ lib/base/webserver/WebServer.dart | 9 ++++++- lib/base/webserver/impl/ShelfWebServer.dart | 26 ++++++++++++++++--- .../webserver/impl/ShelfWebServer_none.dart | 4 ++- pubspec.yaml | 1 + 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/lib/EasyDartModule.dart b/lib/EasyDartModule.dart index 20aecde..e676b5f 100644 --- a/lib/EasyDartModule.dart +++ b/lib/EasyDartModule.dart @@ -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"); + } + }, + ); + } } diff --git a/lib/base/webserver/WebServer.dart b/lib/base/webserver/WebServer.dart index d4dddee..2067cc0 100644 --- a/lib/base/webserver/WebServer.dart +++ b/lib/base/webserver/WebServer.dart @@ -13,7 +13,8 @@ abstract class WebServer { void start(int port, {Response? Function(Request, Map)? interceptor, - Future Function(String?)? tokenCheck}); + Future Function(String?)? tokenCheck, + StaticInfo? static}); void stop(); void addHandler(handler); } @@ -76,3 +77,9 @@ class TokenResult { Map? payload; TokenResult({required this.status, this.errMsg, this.payload}); } + +class StaticInfo { + String path; + String root; + StaticInfo({this.path = "web", this.root = "index.html"}); +} diff --git a/lib/base/webserver/impl/ShelfWebServer.dart b/lib/base/webserver/impl/ShelfWebServer.dart index d8677a5..36bf16b 100644 --- a/lib/base/webserver/impl/ShelfWebServer.dart +++ b/lib/base/webserver/impl/ShelfWebServer.dart @@ -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)? interceptor, - Future Function(String?)? tokenCheck}) async { + Future 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 diff --git a/lib/base/webserver/impl/ShelfWebServer_none.dart b/lib/base/webserver/impl/ShelfWebServer_none.dart index b8d49e3..4d2c806 100644 --- a/lib/base/webserver/impl/ShelfWebServer_none.dart +++ b/lib/base/webserver/impl/ShelfWebServer_none.dart @@ -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() {} diff --git a/pubspec.yaml b/pubspec.yaml index 3275d6f..1c0d7f6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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