我想访问nodejs中的响应数据。
我有redis缓存的中间件。如果redis中存在数据,则返回数据。如果redis中不存在数据,则转到数据库并返回数据。
我的问题是当数据不存在于数据库中时。
我想当数据不存在于redis中时,从数据库中获取数据,当将数据发送到客户端时,将数据设置为redis。
我为redis cache创建了一个中间件:
module.exports = new (class RedisMiddllware {
Cache(req, res, next) {
redis.Get(req.path).then((response)=>{
if (response !== null) {
new OkObjectResult(response).Send(res);
} else {
next();
}
}).catch((error)=>{
throw new Error(error)
})
}
})();
在redis中,我想在next();
之后设置数据,但是当我使用res
时,它不会显示返回数据。
我通过以下方式返回数据:
res.status(400).json({
message: success,
data:{
"isDelete": false,
"_id": "5f4134984cb63a0ca49a574d",
"name": "Farsi",
"flag": "IR",
"unit": "Rial",
"createDate": "Sat Aug 22 2020 19:37:04 GMT+0430 (Iran Daylight Time)",
"createBy": "kianoush",
"__v": 0,
"updateBy": "kianoush",
"updateDate": "Sat Aug 22 2020 20:38:23 GMT+0430 (Iran Daylight Time)",
"deleteDate": "Sun Aug 23 2020 13:31:07 GMT+0430 (Iran Daylight Time)",
"deleteby": "kianoush",
"id": "5f4134984cb63a0ca49a574d"
},
statusCode:200,
success: true,
});
如何从resonse访问next()
之后的中间件中的结果数据???
NodeJS中间件独立地按顺序执行,一旦执行“response.send()”或等价物就停止执行。简单地说,如果您在一个端点上定义了3个中间件函数(md1,md2,md3)。那么Node将首先调用md1,如果md1执行“response.send()”,则根本不调用md2和md3。如果md1执行“next()”,则调用md2,但它不知道md1。此外,它不像函数调用树,在函数调用树中,在md2执行后控件返回到md1。
抛开所有的理论不谈,您需要在从数据库中获取结果之后,将其放入Redis缓存中,在与您ding数据库调用相同的函数中,并且可能还执行“response.json()”。
请查看REPL:https://unselfishvoluminouscad.deepakchampatir.REPL.co
它没有使用Redis缓存,但是您会找到必要的逻辑来完成您想要的任务。
如何从响应中访问next()
之后的中间件中的结果数据???
答:不行,next()
是该函数的结尾。您必须将下一个被调用的函数保存到Redis中。