首页 > 代码库 > 自定义类代理模块
自定义类代理模块
可能在项目中,会有实际情况是,有个模块做什么都好。可是,实际上又需要根据实际需求,在调用方法有某些 "前置操作" 或 "后置操作"
此时需要用到的是,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;
自定义类代理模块
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。