码迷,mamicode.com
首页 > 其他好文 > 详细

自定义类代理模块

时间:2017-07-05 13:33:39      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:定义   evel   function   log   global   logs   模块   handler   ref   

可能在项目中,会有实际情况是,有个模块做什么都好。可是,实际上又需要根据实际需求,在调用方法有某些 "前置操作" 或 "后置操作"

 

此时需要用到的是,Proxy, 具体Docs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

在本项目中,因为 redis 的client 连接会超时过期,再者,一直保持一个一直未在使用的连接也不是十分好。再由于懒惰成性,不想每次调用前都要显式的createClient() 然后完成之后 quit() 掉。

故写了一个 Helper 来代理掉这个模块的所有方法,如下

ps: 由于 return 的是一个 function,所以在这个 function 内的 arguments 为调用是的参数列表。

// redis.js
let redisPort
= process.env.REDIS_PORT || "6379"; let redisHost = process.env.REDIS_HOST || "127.0.0.1"; let redis = require("redis"); let helper = {}; let handler = { get(target, property) { if (!target[property]) { target[property] = function () { let client = redis.createClient({ host: redisHost, port: redisPort }); console.log(arguments); client[property].apply(client, arguments); client.quit(); } } return target[property] } }; let proxy = new Proxy(helper, handler); module.exports = proxy;

 

自定义类代理模块

标签:定义   evel   function   log   global   logs   模块   handler   ref   

原文地址:http://www.cnblogs.com/au_ww/p/7120288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!