docs: function _TPL(ctx)
  {
      let method = ctx.method;
      let route = url.parse(ctx.url).pathname.substr(1);
      isDebug && console.log('route',route,ctx.url)
      let data = null;
      let routeName ;//路由名字
  
      if(((itFace[route] && itFace[route].method == method) || 
          (itFace[`${route}_${method}`] && itFace[`${route}_${method}`].method == method)) 
          && !isDebug){
          if(itFace[route] && itFace[route].method == method){
              routeName = route;
          }
          if(itFace[`${route}_${method}`] && itFace[`${route}_${method}`].method == method){
              routeName = `${route}_${method}`;
          }
          data = itFace[`${routeName}`];
      }else{
          //读取接口文档,并缓存起来
          // console.log('aaaa',`${interFaceRoot}${`${route}_${method}`}.json`)
          if(isExist(path.join(`${interFaceRoot}${route}.json`))){
              data = fs.readFileSync(path.join(`${interFaceRoot}${route}.json`), 'utf-8');
              try {
                  data = eval('('+data+')');
              }catch (err){
                  return {TPL:"接口文档定义错误!"}
              }
              //如果请求方法对不上,则清空现有数据
              if(!data || data.method != method){//
                  data = null;
              }else {
                  itFace[route] = data;
                  routeName = route;
              }
          }
          //如果本文件不存在,则通过匹配文件名加上请求参数
          if(!data && isExist(path.join(`${interFaceRoot}${`${route}_${method}`}.json`))){
              data = fs.readFileSync(path.join(`${interFaceRoot}${`${route}_${method}`}.json`), 'utf-8');
              try {
                  data = eval('('+data+')');
              }catch (err){
                  data = null;
              }
              if(!data || data.method != method){//
                  data = null;
              }else {
                  itFace[route] = data;
                  routeName = route;
              }
          }
          if(data){
              //处理数据中,含有的特殊字符
              let map={"{}":"$B","{S}":"$S","{U}":"$U","{X}":"$X"};
              if(data.pretreat)
              {
                  if(String==data.pretreat.constructor) data.pretreat=[data.pretreat];
                  data.pretreat=data.pretreat.join(";").replace(/{[SUX]?}/g,function($0)
                  {
                      return map[$0];
                  });
              }
              if(data.grant)
                  data.grant=_formatCnd(data.grant,map);
              if(data.check)
                  data.check=_formatCnd(data.check,map);
          }
      }
      if(data){
          if(data.params){
              for(let key in data.params){
                  if('file'==data.params[key].type) data.hasFile=1;
              }
          }
      }
      return {TPL:data,routeName:routeName}
  }