This commit is contained in:
xiongxiao
2026-01-31 18:23:09 +08:00
parent 7e34564516
commit a5429f055a
5 changed files with 34 additions and 21 deletions

View File

@@ -1,4 +1,4 @@
import { QueryRouter, Route, RouteContext, RouteOpts } from './route.ts';
import { AddOpts, QueryRouter, Route, RouteContext, RouteOpts } from './route.ts';
import { ServerNode, ServerNodeOpts } from './server/server.ts';
import { HandleCtx } from './server/server-base.ts';
import { ServerType } from './server/server-type.ts';
@@ -64,8 +64,8 @@ export class App<U = {}> extends QueryRouter {
// @ts-ignore
this.server.listen(...args);
}
addRoute(route: Route) {
super.add(route);
addRoute(route: Route, opts?: AddOpts) {
super.add(route, opts);
}
Route = Route;

View File

@@ -231,8 +231,8 @@ export class Route<U = { [key: string]: any }, T extends SimpleObject = SimpleOb
}
return this;
}
addTo(router: QueryRouter | { add: (route: Route) => void;[key: string]: any }) {
router.add(this);
addTo(router: QueryRouter | { add: (route: Route) => void;[key: string]: any }, opts?: AddOpts) {
router.add(this, opts);
}
setData(data: any) {
this.data = data;
@@ -244,6 +244,10 @@ export class Route<U = { [key: string]: any }, T extends SimpleObject = SimpleOb
}
}
/**
* @parmas override 是否覆盖已存在的route默认true
*/
export type AddOpts = { override?: boolean };
export class QueryRouter {
appId: string = '';
routes: Route[];
@@ -252,11 +256,20 @@ export class QueryRouter {
constructor() {
this.routes = [];
}
add(route: Route) {
/**
* add route
* @param route
* @param opts
*/
add(route: Route, opts?: AddOpts) {
const override = opts?.override ?? true;
const has = this.routes.findIndex((r) => r.path === route.path && r.key === route.key);
if (has !== -1) {
// remove the old route
if (!override) {
return;
}
// 如果存在且override为true则覆盖
this.routes.splice(has, 1);
}
this.routes.push(route);
@@ -664,8 +677,8 @@ export class QueryRouterServer extends QueryRouter {
setHandle(wrapperFn?: HandleFn, ctx?: RouteContext) {
this.handle = this.getHandle(this, wrapperFn, ctx);
}
addRoute(route: Route) {
this.add(route);
addRoute(route: Route, opts?: AddOpts) {
this.add(route, opts);
}
Route = Route;
route(opts: RouteOpts): Route<Required<RouteContext>>;