Giter Site home page Giter Site logo

tomcat's People

Contributors

npmstudy avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

tomcat's Issues

client代码实现



function createClient(config?: any): any {
  const target = {};
  let p = { x: '', config: {} };
  const o = [];
  const t = [];
  const fn = (item) => {
    // console.log('item = ' + item);
    t.push(item);
    o.push(o.length === 0 ? target : (o[o.length - 1][item] = {}));
    p = new Proxy(o[o.length - 1], {
      get: function (target: any, prop: string) {
        // console.dir(prop);
        return function (...args) {
          console.dir(' - - - ');
          console.dir(target.x + '.' + prop);
          console.dir(args);
          return prop;
        };
      },
    });
    p.x = t.join('.').replace('default.', '');
    p.config = Object.assign({}, config);
    // console.dir(o);
  };

  // 默认
  fn('default');

  // 如果有a.b.c
  // 依次a、a.b、a.b.c创建代理
  config?.namespace?.split('.').forEach(fn);

  // console.dir(p);
  return p;
}

const proxy = createClient();
const proxy2 = createClient({ namespace: 'abc.xxx' });

console.log(proxy);
console.log(proxy2);
console.log(proxy.add(2, 3));
console.log(proxy2.abc(1, 3));

函数写法

方法1: 箭头函数

ctx位于最后面

rpc.fn('a', (ctx) => {
     // this === ctx
    console.dir(ctx.path)
    console.dir(ctx.query)
    if (ctx.method === 'POST'){
        return "this is a post"
    }
    return ctx;
});

参数优先

rpc.fn('a', (a, ctx) => {
     // this === ctx
    console.dir(ctx.path)
    console.dir(ctx.query)
    if (ctx.method === 'POST'){
        return "this is a post"
    }
    return a;
});

方法2:普通函数

rpc.fn('a', function (a, ctx) {
     // this === ctx
    console.dir(this.path)
    console.dir(this.query)
    if (this.method === 'POST'){
        return "this is a post"
    }
    return a;
});

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.