Как передать данные через сессию в node

371
10 октября 2017, 02:46

Вопрос заключается в следующем: есть мидл, где объявляются сессии, при авторизации через вк инфа от контакта о пользователе связывается в бд (mysql) с его сессией, далее идет редирект на /groups, где сервер получает инфу об его группах, основываясь на информации в бд. В документации express-session видел такую штуку, как req.session.var, что мол можно создавать переменные в сессиях, но на деле в модуле с авторизацией я записываю в req.session.userId значение userId, в модуле получения групп эта переменная ubdefiend. Ниже приведу примеры кода. Подскажите, как можно решить проблему и вообще на правильном ли я пути

Middle:

module.exports = function(app, express) { 
  var path = require('path'), 
    config = require('../config'), 
    router = require('../routes'); 
  mysql = require('mysql'), 
    session = require('express-session'), 
    MySQLStore = require('express-mysql-session')(session); 
 
  var options = { 
    host: config.get('host'), 
    port: 3306, 
    user: config.get('userDb'), 
    password: config.get('passDb'), 
    database: config.get('db'), 
    schema: { 
      tablename: 'main', 
      columnNames: { 
        session_id: 'session' 
      } 
    } 
  }; 
 
 
 
  app.use(session({ 
    secret: config.get("session:secret"), 
    resave: config.get("session:resave"), 
    saveUninitialized: config.get("session:saveUninitialized"), 
    cookie: config.get("session:cookie"), 
    store: new MySQLStore(options) 
  })); 
 
 
  router(app); 
 
  app.use(express.static(path.join(__dirname, '../public'))); 
  app.use("/public", express.static(path.join(__dirname, '../public'))); 
};

Route

var main = require('./main'), 
  auth = require('./auth'), 
  groups = require('./groups'), 
  checkAuth = require('../middle/checkAuth'); 
// constructor = require('./constructor'), 
// rates = require('./rates'), 
// error = require('./error'); 
 
 
module.exports = function(app) { 
 
  app.get('/', main.home); 
 
  app.get('/public/enter', auth.getCode); 
 
  app.get('/tok', auth.getToken); 
 
  app.get('/group', checkAuth, groups.getGroups); 
 
  // app.get('/constructor', constructor.editBanner(groupId)); 
  // app.post('/constructor', constructor.renderImg); 
 
  // app.get('/rates', rates.showRates(id)); 
 
  // app.get('*', error['404']); 
};

Auth (Аутентификацие через вк)

var urlRender = require('../middle/urlRender'); 
var request = require('request'); 
var db = require('../db/db'), 
  group = require('./groups'); 
 
 
function requestAsync(url) { 
  // return new Promise((resolve, reject) => { 
  request(url, function(error, response, body) { 
    if (error) { 
      console.log("error", error); 
    } else { 
      return body; 
    } 
  }); 
}; 
 
exports.getCode = function(req, res, next) { 
  res.redirect(urlRender.authUrl()); 
}; 
 
exports.getToken = function(req, res, next) { 
  if (req.query.code) { 
    req.session.userId = ''; 
    var code = req.query.code; 
 
    request(urlRender.accessUrl(code), function(error, response, body) { 
      var tokenJSON = JSON.parse(body); 
      var token = tokenJSON['access_token']; 
      var userId = tokenJSON['user_id']; 
      req.session.userId = userId; 
      if (userId && req.session.id) { 
        req.session.save(function(err) { 
          if (err) { 
            console.log("err to save session", err) 
          } 
          db.insertMain(userId, token, req.session.id, "ms", res.redirect('group')); 
          console.log("req.session.userId", req.session.userId); 
        }); 
      } else { 
        Console.log("There is no userid or req.session.id"); 
      } 
    }); 
 
  }; 
};

Groups (получение и запись инфы о группах)

var urlRender = require('../middle/urlRender'); 
var db = require('../db/db'); 
var request = require('request'); 
var mysql = require('mysql'); 
var config = require('../config'); 
var path = require('path'); 
var fs = require('fs'); 
var con = mysql.createConnection({ 
  host: config.get('host'), 
  user: config.get('userDb'), 
  password: config.get('passDb'), 
  database: config.get('db') 
}); 
var fs = require('fs'); 
 
 
var saveImg = function(url, i) { 
  return new Promise(function(resolve, reject) { 
 
    request.get({ 
      url: url, 
      encoding: 'binary' 
    }, function(err, response, body) { 
 
      fs.writeFile(path.join(__dirname, '../lib/') + 'test' + i + '.jpg', body, 'binary', function(err) { 
        if (err) { 
          reject(err) 
        } 
        resolve(); 
      }); 
    }); 
 
  }); 
}; 
 
module.exports.getGroups = function(req, res, next) { 
  var sql = "SELECT idvk, token FROM main INNER JOIN ms ON main.id=ms.idm INNER JOIN sessions ON ms.ids=sessions.id WHERE session='" + req.session.id + "'"; 
  con.query(sql, function(err, results, fields) { 
 
    //не забыть сделать проверку на наличие сессии, иначе перенаправить на /tok 
    req.session.reload(function(err) { 
      if (err) { 
        console.log(err) 
      } 
      console.log("req.session.userid groups", req.session.userId); 
 
    }); 
    var user = results[0]['idvk']; 
    var token = results[0]['token']; 
    request(urlRender.reqVk("groups.get", user, token, "&filter=admin&extended=1"), function(error, response, body) { 
      var groupJSON = JSON.parse(body); 
 
      var groups = groupJSON['response']['items']; 
      // console.log("groups", groups[0]);  
 
      fs.mkdirSync('' + req.session.userId + ''); 
 
 
 
      for (var i = 0; i <= groups.length - 1; i++) { 
 
        saveImg(groups[i]['photo_200'], i).then(function() { 
            console.log("Img is on server"); 
          }) 
          .catch(function(err) { 
            console.log("something wrong with saving img", err); 
          }); 
      } 
    }); 
 
    if (err) { 
      console.log(err) 
    } 
 
  }); 
 
};

READ ALSO
любая система счисления [требует правки]

любая система счисления [требует правки]

Модифицирувать программу-калькулятор, чтобы она могла работать в любой системе счисления

198
Автодополнение в Netbeans

Автодополнение в Netbeans

Очень понравилось автодополнение в Inteliji Idea, но пересел работать за NetBeans и очень огорчён тем, что там автодополнение хуже, чем в IntelijiСуществует...

231
Контакт лист Android

Контакт лист Android

Нужно реализовать контакт-листВ самом элементе контакта содержится название и рядом с каждым контактом должны быть кнопки

231