2014-05-09 2 views
0

IE8/9가 내 앱이 설정된 방식으로 작동하도록하는 데 문제가 있습니다. 처음에는 익스프레스를 사용하여 내 세션 var를 저장하고 있었지만 IE8의 뷰가 렌더링되지 않을 때 '/ broadcast/12343'과 같은 URL 경로로 작업했습니다. 내가 '/ #/broadcast/12343'으로 바꾼다면 Internet Explorer는 정확하게 렌더링하지만 표현식은 해시 변수를 읽지 않으므로이 경우에는 12343이 될 세션을 설정할 수 없습니다. 만들 세션을 변경해야합니다 각도로 체크인하거나 URL에서 해시가없는 IE8을 확인하는 것이 좋습니다.Angularjs/expressjs - 세션 및 IE

그리고 그래 내가 포함했다 ngRoute 및 각-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); 

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

루트/인덱스를 app.js .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 

    }; 

Als 내 layout.jade O를

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

답변

0

파일을 포함 할 때 오류가 발생했습니다. 상대 경로가 아닌 절대 경로가 필요합니다. 도움을 주셔서 감사합니다.

0

app.get('/broadcast/*'는 코너 부분을 반환하도록 설계되어 있습니까?

Angular는 부분적인 부분이 정적 내용이어야하므로 (캐시 될 수 있도록) 부분적으로 표시되어야하는 내용을 제어하는 ​​논리가 컨트롤러에 있어야합니다.

/broadcast/*에 대한 GET 요청이 세션의 내용에 관계없이 항상 동일한 HTML을 반환하도록 코드를 구조해야합니다.

그러나 /broadcast/* 경우 아마도 당신이 중에서 그것에 페이지 링크 = "_ 최고"추가 대상 재 <a> 태그를 변경해야하는 부분을 반환하기로 하지입니다. 그러면 ngRouter가 클릭을 납치하지 않습니다 (해시 추가). 예 : <a href="/broadcast/123" target="_top">Link</a>

나머지 클라이언트 쪽 스크립트를 보지 않고 더 이상 도움을 제공 할 수 없습니다.