web服务加入静态资源支持
This commit is contained in:
@@ -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");
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"});
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {}
|
||||
|
||||
Reference in New Issue
Block a user