2016-02-12 14 views
1

所以我很喜歡99%肯定我只是搞砸了一些愚蠢的東西。Hapi.js Catbox Redis返回「server.cache不是一個函數」

我想設置catbox來緩存對象到redis。我有redis和運行,並且我可以用RDM(類似於redis的實用程序的sql pro)來打它,但Hapi不合作。

我註冊Redis的Catbox廣告緩存,像這樣:

const server = new Hapi.Server({ 
cache: [ 
{ 
    name: 'redisCache', 
    engine: require('catbox-redis'), 
    host: 'redis', 
    partition: 'cache', 
    password: 'devpassword' 
} 
] 
}); 

我在server.js這樣做的代碼塊我去註冊一些插件和啓動服務器後。我也是在文件

module.exports = server; 

然後在我的路線文件的末尾導出服務器,我試圖建立像這樣一個測試路線:

{ 
    method: 'GET', 
    path: '/cacheSet/{key}/{value}', 
    config: { auth: false }, 
    handler: function(req, res) { 
     const testCache = server.cache({ 
      cache: 'redisCache', 
      expireIn: 1000 
     }); 

     testCache.set(req.params.key, req.params.value, 1000, function(e) { 
      console.log(e); 
      res(Boom.create(e.http_code, e.message)); 
     }) 
     res(req.params.key + " " + req.params.value); 
    } 
}, 

注:我的路線是在一個外部文件中,並被導入server.js,我註冊它們。

如果我註釋掉這條路線上的所有緩存內容,路線運行良好並返回我的參數。

如果我用緩存的東西運行這個,起初我得到了「服務器沒有定義」。於是我再加入

const server      = require('./../server.js'); 

導入服務器。

現在,當我運行這個,我得到「server.cache不是一個函數」和500錯誤。

我不明白我在做什麼錯。我的猜測是我正在導入服務器,但也許它是沒有設置所有配置的對象,因此無法使用.cache方法。然而,這看起來是錯誤的,因爲.cache應該總是默認的內存緩存方法,所以即使我的緩存註冊尚未激活,server.cache在理論上仍應該是一種方法。

我知道它必須是基本的東西我搞砸了,但是什麼?

回答

1

我說得對。我在做一些愚蠢的事情。這與我如何導出我的服務器有關。我修改了我的結構,以便撤出最初的服務器創建並使其更加模塊化。現在,我只是出口只是服務器,像這樣:

'use strict'; 
const Hapi  = require('hapi'); 
const server = new Hapi.Server({ 
    cache: [ 
    { 
     name: 'redisCache', 
     engine: require('catbox-redis'), 
     host: 'redis', 
     partition: 'cache', 
     password: 'devpassword' 
    } 
    ] 
}); 
module.exports = server; 

然後我導入到我的主服務器上的文件(現在index.js以前server.js)和一切都正常運行。我也可以將其導入任何其他文件(在本例中爲我的路由文件)並訪問服務器以獲取適當的方法。

Redis很高興地存儲密鑰,Hapi很高興地不給我錯誤。

如果有人遇到類似這樣的愚蠢錯誤,請留在此處。

+0

您好,我正在使用catbox-redis進行緩存,並且我遇到了問題。它不會設置值,而是顯示斷開的eror。如果你有任何關於它,請幫助我http://stackoverflow.com/questions/41779511/catbox-redis-is-showing-disconnected-error-on-my-hapijs-application – Sivabalan

+0

你也可以通過使用服務器內部處理程序request.server – sij

相關問題