更新拦截器实现方式
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>{});
|
||||||
|
|||||||
Reference in New Issue
Block a user