关于js prototy方法重写的问题
发布于 9 年前 作者 suntopo 3492 次浏览 最后一次编辑是 8 年前 来自 问答

最近在做微信开发,其中用到一个开发包weixin-service;

其中开发者指出,production环境下,不应该保存到内存中

WxService.prototype.saveToken = function(token, callback){
  callback = is(callback, 'function') ? callback : function(){};
  this.tokenStore = {
    componentAccessToken: token.componentAccessToken,
    expireTime: (new Date().getTime()) + (token.expireTime - 10) * 1000 // 过期时间,因网络延迟等,将实际过期时间提前10秒,以防止临界点                                                
  };
  if (process.env.NODE_ENV === 'production') {
    console.warn('Dont save accessToken in memory, when cluster or multi-computer!');
  }
  if(typeof callback === 'function') callback(null, this.tokenStore);
};

问题

1)我没有看到开发者提供回调方式来改变这种存储/获取的方式(是不是我没看到呢?)

2)如果真的没有话,我想通过覆盖的方式来改变, 这样

var WxService = require('weixin-service');
var config = require('../config');

var redisClient = redis.createClient({
    host: config.redis.host,
    port: config.redis.port
});

redisClient.select(2);
redisClient.on("error", function (err) {
    console.log("Error " + err);
});

WxService.prototype.saveToken = function(token, callback){
    console.log('进了自定义saveToken了');
    callback = is(callback, 'function') ? callback : function(){};
    this.tokenStore = {
        componentAccessToken: token.componentAccessToken,
        expireTime: (new Date().getTime()) + (token.expireTime - 10) * 1000 // 过期时间,因网络延迟等,将实际过期时间提前10秒,以防止临界点
    };
    if (process.env.NODE_ENV === 'production') {
        console.warn('Dont save accessToken in memory, when cluster or multi-computer!');
        //redisClient.hmset('tokenStore', token);
    }
    if(typeof callback === 'function') callback(null, token);
};

WxService.prototype.getToken = function(callback){
    console.log('进了自定义getToken了');
    callback = is(callback, 'function') ? callback : function(){};
    redisClient.hgetall('tokenStore', function(err, token) {
        if(token){
		   //todo
            if((new Date().getTime()) < this.tokenStore.expireTime) {
                callback(null, this.tokenStore);
            }else {
                return callback(null);
            }
        }else {
            return callback(null);
        }
    });
};

module.exports = WxService;
回到顶部