更新拦截器实现方式

This commit is contained in:
2025-06-16 17:11:53 +08:00
parent 069ca209d0
commit 05b45ba00d
2 changed files with 17 additions and 13 deletions

View File

@@ -1,3 +1,5 @@
import 'package:EasyDartModule/EasyDartModule.dart';
abstract class WebServer { abstract class WebServer {
static late WebServer _webServer; static late WebServer _webServer;
@@ -10,7 +12,8 @@ abstract class WebServer {
} }
void start(int port, void start(int port,
{Function? interceptor, TokenResult Function(String?)? tokenCheck}); {Response? Function(Request, Map<String, dynamic>)? interceptor,
TokenResult Function(String?)? tokenCheck});
void stop(); void stop();
void addHandler(handler); void addHandler(handler);
} }

View File

@@ -18,6 +18,7 @@ class ShelfWebServer implements WebServer {
final Uuid uuid = Uuid(); final Uuid uuid = Uuid();
final Map<String, WebSocketHandler> _wsCall = {}; final Map<String, WebSocketHandler> _wsCall = {};
TokenResult Function(String?)? tokenCheck; TokenResult Function(String?)? tokenCheck;
Response? Function(Request, Map<String, dynamic>)? interceptor;
ShelfWebServer(this.logger); ShelfWebServer(this.logger);
final String tag = "webserver"; final String tag = "webserver";
@@ -137,23 +138,16 @@ class ShelfWebServer implements WebServer {
@override @override
void start(int port, void start(int port,
{Function? interceptor, {Response? Function(Request, Map<String, dynamic>)? interceptor,
TokenResult Function(String?)? tokenCheck}) async { TokenResult Function(String?)? tokenCheck}) async {
//反射获取全部路由地址
var pipeline = Pipeline() var pipeline = Pipeline()
//生成请求id
.addMiddleware(requestIdMiddleware()) .addMiddleware(requestIdMiddleware())
//api日志记录
.addMiddleware(logRequests()); .addMiddleware(logRequests());
//判断拦截器类型 //添加自定义拦截器
if (interceptor != null) { if (interceptor != null) {
pipeline = pipeline.addMiddleware((Handler innerHandler) { this.interceptor = interceptor;
return (Request request) async {
var response = interceptor(request);
if (response == null) {
return innerHandler(request);
}
return response;
};
});
} }
if (tokenCheck != null) { if (tokenCheck != null) {
this.tokenCheck = tokenCheck; this.tokenCheck = tokenCheck;
@@ -240,6 +234,13 @@ class ShelfWebServer implements WebServer {
return setResponseHeader(response, p[1].type); return setResponseHeader(response, p[1].type);
} }
} }
//自定义拦截函数
if (interceptor != null) {
var response = interceptor!(req, payload ?? {});
if (response != null) {
return response;
}
}
if (p[3] == 2) { if (p[3] == 2) {
response = await p[2](req, payload ?? <String, dynamic>{}); response = await p[2](req, payload ?? <String, dynamic>{});