首页 > 其他 > 详细

自定义类代理模块

时间:2017-07-05 12:39:23      阅读:256      评论:0      收藏:0      [点我收藏+]

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

 

此时需要用到的是,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;

 

自定义类代理模块

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!