Node.js:为什么不保存session?

Node.js: Why not saved session?

代码如下:

app.get('/vklogin', function(request, response) {
console.log('Авторизация через соц.сеть "Вконтакте"'.green);

var url_parts = url.parse(request.url, true);
var query = url_parts.query;
var data = querystring.stringify({
  client_id: '4836170',
  client_secret: 'cPkR53zhon0lU7TAiz9f',
  code: query.code,
  redirect_uri: 'http://' + request.headers.host + '/vklogin'
});
var options = {
  host: 'oauth.vk.com',
  port: 443,
  path: '/access_token?' + data,
  method: 'GET'
};
var httpsreq = https.request(options, function(response) {
  response.setEncoding('utf8');
  response.on('data', function(chunk) {
    var chunk = JSON.parse(chunk);
    pg.connect(dbconfig, function(err, client, done) {
      if (err) {
        return console.error('Ошибка подключения к БД',err);
      }
      client.query('select * from users where vk = ', [chunk.user_id], function(err, result) {
        done();
        if (err) {
          console.error('Ошибка получения данных',err);
        } else {
          if (result.rows[0]) {
            console.log(result.rows[0]);
            request.session.authorized = true;
            request.session.userid = result.rows[0].id;
          } else {
            console.log('Попытка создания нового пользователя. ');
            client.query("insert into users (email, vk) values ('" + chunk.email + "', " + chunk.user_id + ") returning id", function(err, result) {
              done();
              if (err) {
                console.error('Ошибка записи данных в БД', err);
              } else {
                request.session.authorized = true;
                request.session.userid = result.rows[0].id;
                console.log('Добавлен новый пользователь # ' + result.rows[0].id);
              }
            });
          }

        }
        client.end();
      });
      console.log("№ пользователья: " + request.session.userid);
    });
  });
});
httpsreq.end();
if (request.session.authorized) {
  response.writeHead(301, {
    Location: 'http://' + request.headers.host + '/cabinet'
  });
} else {
  response.writeHead(301, {
    Location: 'http://' + request.headers.host
  });
}
response.end();
});

这就是为什么外部函数session没有被保存?我的代码有什么问题?

在函数内部,一切正常,在函数外部 - 未定义

在此session之后,逻辑必须得到维护并且随处可用,也随处可用,不是吗?

试图用session声明一个变量,但是也没用,而且没有报错也不给,更不知道从哪里挖了。

var sess;
app.get('/vklogin', function(request, response) {
  sess = request.session;
  // other code...
});

更新:

我的问题与对异步进程的控制缺乏了解有关。我无法理解如何执行最初的数据库查询、信息保存在 session 中,然后检查 session 变量并转发到所需页面。

如果你知道如何为我制定正确的执行顺序,请写下答案。

好的,我发现需要异步模式。看这里:http://book.mixu.net/node/ch7.html