Экспресс-сервер Node.js на appfog: сеансы теряются при обновлении страницы при использовании Chrome на Android
Я так растерялся. Я сделал экспресс-приложение, как это:
$ express -s -e sessionTest
Затем я немного отредактировал маршруты, чтобы установить var сеанса, проверить его и удалить. Я запускаю сервер на своей локальной машине, и любой браузер, который я использую (Chrome, Firefox, Android Chrome, Android Dolphin), работает должным образом. Однако, как только я загружаю это в appfog, Chrome на Android перестает поддерживать тот же сеанс при загрузке страницы. Вы можете проверить это сами, вот мое приложение на appfog:
Первая страница, на которую вы попадаете, установит сеанс var. На этой странице есть ссылка, чтобы проверить, установлена ли сессия var, и еще одна ссылка, чтобы уничтожить ваш сеанс. Chrome для Android никогда не сообщает, что вы установили сессию var. Опять же, это не работает только с Chrome для Android, когда мое приложение находится на appfog. Любой другой браузер, кажется, работает нормально, независимо от того, включено это приложение или нет.
Это ошибка appfog? Это ошибка Chrome для Android? Это ошибка экспресс или подключения? Или я что-то не так делаю?
Мой код:
app.js
var express = require('express')
, routes = require('./routes')
, http = require('http')
, path = require('path');
var app = express();
app.configure(function(){
app.set('port', process.env.VMC_APP_PORT || process.env.PORT || 1337);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('secret'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
app.get('/', routes.index);
app.get('/session', routes.session);
app.get('/destroy', routes.kill);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
./routes/index.js
exports.index = function(req, res){
req.session.test = 1;
res.render('index', { title: 'I set the session var test to 1' });
};
exports.session = function(req, res){
if(req.session.test === 1) {
res.render('index', {title: 'the session var test is 1! :)'});
} else {
res.render('index', {title: 'the session var test is not 1!!!!!! >:('});
}
};
exports.kill = function(req, res){
req.session.destroy();
res.render('index', {title: 'I called session.destroy()'});
};
2 ответа
Ну, я не знаю, что не так с AppFog, но я создал приложение и запустил этот код на Nodejitsu, и я могу подтвердить, что он работает в Chrome @ Android 4.1.2: http://testforso.jit.su/
У меня такая же проблема! Не знаю, что попробовать еще. Мое приложение отлично работает на localhost. Но при развертывании его на AppFog замечание работает. Я создал билет. на AppFog.
Как зевок, я развернул свое приложение на Nodejutsu, и оно отлично работает!