Я пытаюсь настроить node.js-сервер, используя экспресс-структуру и реализовать сеансы.Почему app.use (...) не может быть объявлен в async-функции?
Это работает:
var express = require('express');
var session = require('express-session');
var redis = require('redis');
var server = express();
var redisClient = redis.createClient();
server.use(session({secret: 'mySuperSecretKey'}));
server.listen(8000, function() {
console.log('listening...');
});
server.get('/', function (req, res) {
req.session.aSessionEntry = 'value';
res.send('Your session entry is' + req.session.aSessionEntry);
});
Однако, когда я объявляю server.use (сеанс (...)) внутри функции асинхронной, она игнорируется - обработка сеанса больше не работает.
Здесь:
var express = require('express');
var session = require('express-session');
var redis = require('redis');
var server = express();
var redisClient = redis.createClient();
redisClient.get("sessionSecret", function(err, reply) {
server.use(session({secret: reply.toString()}));
};
server.listen(8000, function() {
console.log('listening...');
});
server.get('/', function (req, res) {
req.session.aSessionEntry = 'value';
res.send('Your session entry is' + req.session.aSessionEntry);
});
Почему не удается это сделать?
Я не знаю точно, но я думаю, что если вы положили 'server.listen' внутри обратного вызова функции async, он должен работать –
. Скорее всего, потому, что' use' - это функция настройки для добавления промежуточного программного обеспечения. Когда вы вызываете 'listen', express использует то, что было настроено. Но, помещая его в обратный вызов асинхронной операции, сначала вызывается 'listen', без настройки сеанса. – Joseph
См. Http://expressjs.com/ru/4x/api.html#app.use. Порядок определения важен, может возникнуть проблема с регистрацией '.get'. –