【问题标题】:Angularjs / expressjs - sessions and IEAngularjs / expressjs - 会话和 IE
【发布时间】:2014-05-12 13:02:05
【问题描述】:

我无法让 IE8/9 与我的应用程序的设置方式一起工作。最初我使用 express 来存储我的会话 var,这适用于像 '/broadcast/12343' 这样的 url 路径,但是当在 IE8 中查看时,什么都没有呈现。如果我将其更改为 '/#/broadcast/12343' IE 会正确呈现,但是 express 不会读取散列变量,因此无法设置会话,在这种情况下为 12343。我要么需要更改要创建的会话并以角度检查或最好让 IE8 在 URL 中没有哈希的情况下工作。

是的,我已经包含了 ngRoute 和 angular-route.min.js 的 CDN 文件

我的 server.js

      app.configure(function(){
        app.set('views', __dirname + '/views');
        app.set('view engine', 'jade');
        app.set('view options', {
          layout: false
        });
        app.use( express.cookieParser() );
        app.use(express.session({
              store: new MongoStore({
                url: 'mongodb://URL/'
              }),
              maxAge  : new Date(Date.now() + (3600000 * 24 *365)), //1 year
              expires : new Date(Date.now() + (3600000 * 24 *365)), //1 year
              secret: '1234567890QWERTY',
              httpOnly: false 
        }));
        app.use(express.favicon());
        app.use(express.bodyParser());
        app.use(express.methodOverride());
        app.use(express.static(__dirname + '/public'));
        app.use(app.router);
      });

      app.configure('development', function(){
        app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
      });

      app.configure('production', function(){
        app.use(express.errorHandler());
      });

      app.get('/partials/:name', routes.partials);
      app.get('/event/:eventid', routes.event);
      app.post('/registrant/create', routes.register);

      app.get('/broadcast/*', function (req, res) {

          var eventid = req.url.replace("/broadcast/", "");///ie 12343
          if(!req.session.eventids) req.session.eventids = [];

              if (req.session.eventids.indexOf(eventid) > -1) {

                 res.render('index');

          } else {

             res.render('signup', {
                    title:"Signup",
                    eventid:eventid
                });
          }
      });

      app.get("*",  routes.index);

app.js

var app = angular.module('myApp', ['myApp.filters','ngRoute','myApp.directives','myApp.services','snap']);

路由/index.js

   var Event = require('../models/events');
   var mongoose= require('mongoose');
   var url= require('url');

  exports.index = function(req, res){
    res.render('index');
  };

  exports.partials = function (req, res) {
    var name = req.params.name;

     res.render('partials/' + name);
  };

  exports.event = function (req, res) {

    var id = req.params.eventid;

    var self = this;

    Event.findOne({managerId:id}, function(err, docs){
        res.json(docs);   
    }); 
  };

  exports.register = function (req, res) {

    var input = JSON.stringify(req.body);
    var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;

    new Registrant({
        eventid:req.body.eventid,
        fields:input,
        ip :ip,
        updated_at : Date.now()

    }).save( function ( err, registrant, count ){

      if( err ) return next( err );
      req.session.username = req.body.firstname + req.body.lastname + req.body.eventid;

    });

    if (req.session.eventids.indexOf(req.body.eventid) < 0) 
        req.session.eventids.push(req.body.eventid);

    res.redirect('/broadcast/'+req.body.eventid);//eventid rendered in form on signup page

  };

也是我的 layout.jade

   html#ng-app(data-ng-app="myApp"  xmlns:ng="http://angularjs.org")
    ......

【问题讨论】:

    标签: javascript node.js angularjs session internet-explorer-8


    【解决方案1】:

    app.get('/broadcast/*' 是否设计为返回 Angular 部分?

    Angular 预计您的部分内容应该是静态内容(以便可以缓存),并且控制应该显示的内容的逻辑应该在控制器中。

    您应该重新构建代码结构,以便对/broadcast/* 的 GET 请求始终返回相同的 HTML,而不管您的会话内容如何。

    但是,如果 /broadcast/*NOT 应该返回一个部分,那么也许你需要对链接到它的任何页面中的 &lt;a&gt; 标记进行更改,添加 target="_top ”。这将确保 ngRouter 不会劫持点击(附加哈希)。例如&lt;a href="/broadcast/123" target="_top"&gt;Link&lt;/a&gt;

    如果没有看到您的其他客户端脚本,我无法提供更多帮助。

    【讨论】:

      【解决方案2】:

      文件包含错误,我需要绝对路径而不是相对路径,不过感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 2013-08-31
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        • 1970-01-01
        • 2011-02-01
        • 2012-07-19
        • 2013-06-21
        相关资源
        最近更新 更多