web服务加入静态资源支持
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
library EasyDartModule;
|
library EasyDartModule;
|
||||||
|
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:EasyDartModule/base/database/DataBase.dart';
|
import 'package:EasyDartModule/base/database/DataBase.dart';
|
||||||
import 'package:EasyDartModule/base/database/impl/MongoDb.dart';
|
import 'package:EasyDartModule/base/database/impl/MongoDb.dart';
|
||||||
import 'package:EasyDartModule/base/discovery/Discovery.dart';
|
import 'package:EasyDartModule/base/discovery/Discovery.dart';
|
||||||
@@ -88,4 +90,18 @@ class EasyDartModule {
|
|||||||
}
|
}
|
||||||
return true;
|
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");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ abstract class WebServer {
|
|||||||
|
|
||||||
void start(int port,
|
void start(int port,
|
||||||
{Response? Function(Request, Map<String, dynamic>)? interceptor,
|
{Response? Function(Request, Map<String, dynamic>)? interceptor,
|
||||||
Future<TokenResult> Function(String?)? tokenCheck});
|
Future<TokenResult> Function(String?)? tokenCheck,
|
||||||
|
StaticInfo? static});
|
||||||
void stop();
|
void stop();
|
||||||
void addHandler(handler);
|
void addHandler(handler);
|
||||||
}
|
}
|
||||||
@@ -76,3 +77,9 @@ class TokenResult {
|
|||||||
Map<String, dynamic>? payload;
|
Map<String, dynamic>? payload;
|
||||||
TokenResult({required this.status, this.errMsg, this.payload});
|
TokenResult({required this.status, this.errMsg, this.payload});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class StaticInfo {
|
||||||
|
String path;
|
||||||
|
String root;
|
||||||
|
StaticInfo({this.path = "web", this.root = "index.html"});
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
|
|||||||
import 'package:shelf/shelf.dart';
|
import 'package:shelf/shelf.dart';
|
||||||
import 'package:shelf/shelf_io.dart';
|
import 'package:shelf/shelf_io.dart';
|
||||||
import 'package:shelf_router/shelf_router.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:shelf_web_socket/shelf_web_socket.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
@@ -159,12 +160,18 @@ class ShelfWebServer implements WebServer {
|
|||||||
@override
|
@override
|
||||||
void start(int port,
|
void start(int port,
|
||||||
{Response? Function(Request, Map<String, dynamic>)? interceptor,
|
{Response? Function(Request, Map<String, dynamic>)? interceptor,
|
||||||
Future<TokenResult> Function(String?)? tokenCheck}) async {
|
Future<TokenResult> Function(String?)? tokenCheck,
|
||||||
|
StaticInfo? static}) async {
|
||||||
var pipeline = Pipeline()
|
var pipeline = Pipeline()
|
||||||
//生成请求id
|
//生成请求id
|
||||||
.addMiddleware(requestIdMiddleware())
|
.addMiddleware(requestIdMiddleware())
|
||||||
//api日志记录
|
//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) {
|
if (interceptor != null) {
|
||||||
this.interceptor = interceptor;
|
this.interceptor = interceptor;
|
||||||
@@ -172,9 +179,20 @@ class ShelfWebServer implements WebServer {
|
|||||||
if (tokenCheck != null) {
|
if (tokenCheck != null) {
|
||||||
this.tokenCheck = tokenCheck;
|
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);
|
_server = await serve(handler, InternetAddress.anyIPv4, port);
|
||||||
print('Server listening on port ${_server?.port}');
|
print('HTTP Server Listening On Port ${_server?.port}');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -7,7 +7,9 @@ class ShelfWebServer implements WebServer {
|
|||||||
ShelfWebServer(this.logger);
|
ShelfWebServer(this.logger);
|
||||||
@override
|
@override
|
||||||
void start(int port,
|
void start(int port,
|
||||||
{Function? interceptor, Function(String?)? tokenCheck}) async {}
|
{Function? interceptor,
|
||||||
|
Function(String?)? tokenCheck,
|
||||||
|
StaticInfo? static}) async {}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void stop() {}
|
void stop() {}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ dependencies:
|
|||||||
shelf_router: ^1.1.4
|
shelf_router: ^1.1.4
|
||||||
shelf_web_socket: ^2.0.1
|
shelf_web_socket: ^2.0.1
|
||||||
shelf_multipart: ^2.0.1
|
shelf_multipart: ^2.0.1
|
||||||
|
shelf_static: ^1.1.3
|
||||||
uuid: ^4.5.1
|
uuid: ^4.5.1
|
||||||
mqtt5_client: ^4.11.0
|
mqtt5_client: ^4.11.0
|
||||||
minio: ^3.5.7
|
minio: ^3.5.7
|
||||||
|
|||||||
Reference in New Issue
Block a user