Typescript Node Express 动态添加路由 - 有人可以解释一下这段代码吗?

问题描述 投票:0回答:1

我正在运行一个带有节点/打字稿和express/express验证器的API服务器,并且在某个地方找到了我真正喜欢的这段代码,将我的路由逻辑与创建路由器分开:


function createRouter(route: Array<RouteEntry>): Router {
  const router = Router();
  route.forEach((subRoute: RouteEntry) => {
    (router as any)[subRoute.method](
      subRoute.route,
      ...subRoute.validation,
      async (req: Request, res: Response, next: NextFunction) => {
        let data = validationResult(req);
        let response = await subRoute.action(data, req, res);
      }
    );
  });
  return router;
}

所以你向这个函数传递一个 RouteEntry 的数组:

export type RouteEntry = {
  method: string;
  route: string;
  action: (data: Record<string, any>, req?: Request, res?: Response) => any;
  validation: Array<Middleware & ContextRunner>;
};

我不明白的是(请原谅我的 Typescript 深度有限):

route.forEach((subRoute: RouteEntry) => {
    (router as any)[subRoute.method](...);

显然它可以工作并将路由添加到路由器堆栈,但我不明白打字稿如何知道这样做?根据我的简单理解,我期望某种分配,例如 Router[subRoute.method] = ...

任何提示将不胜感激...

node.js typescript express router
1个回答
0
投票

显然有一系列路由定义,如下所示:

const newRoutes = [
    {method: "get", route: "/viewitem", validation: [], action: viewItem},
    {method: "get", route: "/list"}, validation: [], action: list
    {method: "post", route: "/newitem", validation: [checkData], action: createNewItem}
];

相关代码迭代此数组,并为数组中的每个对象注册一个 Express 路由处理程序,从数组中的每个对象获取方法、路径、任何验证处理程序和 RouteHandler 函数。

© www.soinside.com 2019 - 2024. All rights reserved.