所以我想99%肯定我只是在搞砸一些愚蠢的东西。
我正在尝试设置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在理论上也应该是一种方法。
我知道这一定是我搞砸的基本知识,但是那又是什么呢?
我是对的。我当时在做一些愚蠢的事情。这与我导出服务器的方式有关。我修改了结构,以完成最初的服务器创建并使其更具模块化。现在,我只是像这样简单地导出服务器:
'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高兴地没有给我错误。
离开这里,以防其他人遇到这种愚蠢的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句