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