docs: function defaultFilter(ctx) {
      const method = ctx.req.method.toUpperCase();
      const pathname = ctx.req._parsedUrl.pathname.toLowerCase();
  
      let lastIndexOf = pathname.lastIndexOf('/');
      let name = lastIndexOf >= 0 ? pathname.substring(lastIndexOf + 1) : null;
      if (name === 'id') {
          // 如果name为id则再向前取一级
          const substring = pathname.substring(0, lastIndexOf);
          lastIndexOf = substring.lastIndexOf('/');
          name = lastIndexOf >= 0 ? pathname.substring(lastIndexOf + 1) : null;
      }
  
      let key = null;
      switch (method) {
          case 'GET':
              const reg = new RegExp(`/\/${name}\/*\w/`);
              if (reg.test(pathname)) {
                  // 如果匹配成功，则说明url是：/param/xx这样的结构，目前这种结构只有id查询
                  key = 'id';
              } else {
                  // 如果匹配失败，则说明url是：/param这样的结构，目前这种结构只有list查询
                  key = 'list';
              }
              break;
          case 'POST':
              key = 'create';
              break;
          case 'PUT':
              key = 'update';
              break;
          case 'DELETE':
              key = 'remove';
              break;
      }
      return { name, key };
  }