提问者:小点点

访问nodejs中的共振结果


我想访问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()之后的中间件中的结果数据???


共2个答案

匿名用户

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中。