Hapi在内存缓存中使用服务器方法不接受对象作为参数

时间:2016-05-23 07:13:57

标签: node.js caching methods server hapijs

您好我正在使用nodejs上的hapi框架开发反向代理服务器,有两个简单的任务:

  1. 将api发送到另一台服务器
  2. 使用任务1的响应执行与某些静态数据合并的数据
  3. 任务1没有问题,所有内容都可以通过预先设置正确缓存。但是对于任务2,它并不那么幸运,错误就像下面的

      

    调试:内部,实现,错误   server-0错误:调用时无效的方法键:replacer   Object.settings.cache.generateFunc.func中的server-0 [作为替换者](/home/jack/WebstormProjects/dcm-reverse-proxy/node_modules/hapi/lib/methods.js:145:51)   server-0 at /home/jack/WebstormProjects/dcm-reverse-proxy/server.js:67:32   server-0 at /home/jack/WebstormProjects/dcm-reverse-proxy/node_modules/hapi/node_modules/catbox/node_modules/hoek/lib/index.js:850:22   _combinedTickCallback的server-0(internal / process / next_tick.js:67:7)   server-0 at process._tickDomainCallback(internal / process / next_tick.js:122:9)

    我终于发现服务器方法注册只能接受字符串参数来生成缓存ID,

    //register
    server.method('somemethod', proxyService.replacer, {
        cache:{
            cache: 'inMemCache',
            expiresIn: 5 * 60 * 1000,
            generateTimeout: 2000
        }
    });
    
    //calling, argument1 and argument2 must be {string}
    server.methods.somemethod(argument1, argument2, function(_error, _result, cached, _report){
    ...
    });

    只是想知道任何人之前遇到过这种情况,如果我想以不同的格式传递argument1和argument2我该怎么办?

    先谢谢。

1 个答案:

答案 0 :(得分:2)

我自己找到了答案,hapi服务器方法已经记录了:

  

生成自定义密钥

     

除了上述选项之外,您还可以根据传递给方法的参数传递用于生成键的自定义函数。如果你的方法只接受字符串,数字和布尔值的某种组合,hapi将为你生成一个理智的密钥。 但是,如果您的方法接受对象参数,则应指定一个将生成类似于以下 的键的函数。注意:传递给您的方法的任何参数都可用于generateKey方法,但不能用于回调。