node.js如何从中间件内部的redis数据库中获取数据

尼奥

我正在做中间件模块,它将从 redis 中提取数据并放入 req.my_session.[here]

这是在 app.use() 内部调用的函数;

  function parse_cookies(req){
      if(req.headers.cookie != null){
        var result = req.headers.cookie.match(new RegExp('m:[^=]*=[^; ]*', 'ig'));
        if(result != null){
          for(var i = 0; i < result.length; i++){
            var result1 = result[i].split('=');
            req.my_session[result1[0].substr(2)] = result1[1];
            // get from redis value
            client.get('sess:'+result1[1], function(err, reply) {
              // reply is null when the key is missing
              console.log(reply);
              let li = i;
              req.my_session[result1[0].substr(2)] = reply;
              console.log('li = ' + li);
              console.log('result1.lenght= ' + result.length);
              if(i == result.length){
                console.log('call the next');
              }
            });
          }
        }
      }
    } // parse_cookies

在控制台中,我总是输出 3,如何使用 redis.get 和最后一次数据调用 next() 函数从数据库中获取所有数据以从我的函数中取出?

problem it's get data from database in my middleware, I can't because redis has callback function

    client.get("missingkey", function(err, reply) {
    // reply is null when the key is missing
    console.log(reply);
});
飞三

我认为问题是因为循环中的异步,您可以尝试以下操作

  function parse_cookies(req){
      if(req.headers.cookie != null){
        var result = req.headers.cookie.match(new RegExp('m:[^=]*=[^; ]*', 'ig'));
        if(result != null){
          var promises = [];
          for(var i = 0; i < result.length; i++){
            var result1 = result[i].split('=');
            promises.push(getFromRd(req, result1));

          }

          return Promise.all(promises)
                 .then(() => {
                      return next()
                 })
                 .catch((e) => {
                      return next({error: e})
                 })
        }
      }
    } // parse_cookies


  function getFromRd(req, result1) {
         req.my_session[result1[0].substr(2)] = result1[1];
         // get from redis value
         return client.get('sess:'+result1[1], function(err, reply) {
                if (err) {
                    throw Error(' failed to find ' + 'sess:' + result1[1])
                }
                // reply is null when the key is missing
                console.log(reply);
                let li = i;
                req.my_session[result1[0].substr(2)] = reply;
                console.log('li = ' + li);
                console.log('result1.lenght= ' + result.length);
                return {success:true}
            });
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从多部分表单数据中获取Node JS中间件中的请求正文?

来自分类Dev

带有 exress 处理中间件外的数据库连接错误的 Node.js

来自分类Dev

如何编写中间件以修改Node JS中的响应

来自分类Dev

如何从前端 react.js 中的 node.js 中的多个数据库中获取数据

来自分类Dev

如何关闭node.js中的数据库连接?

来自分类Dev

在Node.js / Express中连接中间件

来自分类Dev

Node js:猫鼬中间件中的Bluebird Promisify

来自分类Dev

从中间件访问数据库时,操作已在进行中错误

来自分类Dev

如何从中间件获取对象数据?

来自分类Dev

Node.js中间件包装

来自分类Dev

基本的node.js中间件

来自分类Dev

如何在Node.js中编写中间件类

来自分类Dev

如何使用Node从MySQL数据库获取数据

来自分类Dev

通过Heroku中的Node连接到Redis数据库

来自分类Dev

Node.js模块从MongoDB数据库中获取数据

来自分类Dev

如何从Node js中的“ then”中获取数据?

来自分类Dev

中间件影响数据库中插入的绑定

来自分类Dev

如何在Node.js中使用数据库?

来自分类Dev

如何将中间件路由器用于Express Node.js中的子路径

来自分类Dev

在node.js中测试后清理数据库

来自分类Dev

Node.js Api,无法从数据库中删除

来自分类Dev

在node.js中测试后清理数据库

来自分类Dev

在Node.js中处理异步数据库

来自分类Dev

Node js数据库连接在单独的模块中

来自分类Dev

Node JS较少中间件无法自动编译

来自分类Dev

Node.js-导致404的外部中间件

来自分类Dev

用于Node.js的Passport中间件

来自分类Dev

如何在条件中间件中使用Node.js Express-session?

来自分类Dev

如何在发布路线上模拟Express / Node.js中间件?

Related 相关文章

热门标签

归档