更新拦截器实现方式

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 {
static late WebServer _webServer;
@@ -10,7 +12,8 @@ abstract class WebServer {
}
void start(int port,
{Function? interceptor, TokenResult Function(String?)? tokenCheck});
{Response? Function(Request, Map<String, dynamic>)? interceptor,
TokenResult Function(String?)? tokenCheck});
void stop();
void addHandler(handler);
}

View File

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