2013-12-01 2 views
3

Я немного смущен тем, как бороться с хэшами Backbone и pushState.Использование узла для перенаправления PushState с помощью вложенных базовых каталогов

В основном я хочу

localhost:3004/#/explore 

быть

localhost:3004/explore 

и

localhost:3004/#/profile/123456 

быть

localhost:3004/profile/123456 

Первым делом было указать все мои статические каталоги, которые, похоже, работают, поскольку я могу получить доступ ко всем файлам напрямую через браузер.

app.configure(function(){ 


    app.use("/js", express.static(path.join(__dirname, 'www/js'))); 
    app.use("/assets", express.static(path.join(__dirname, 'www/assets'))); 
    app.use("/style", express.static(path.join(__dirname, 'www/style'))); 
    app.use("/templates", express.static(path.join(__dirname, 'www/templates'))); 
    app.use("/config", express.static(path.join(__dirname, 'www/config'))); 

    app.use(express.favicon()); 
    app.use(express.logger()); 
    app.use(express.cookieParser()); 
    app.use(express.bodyParser()); 
    app.use(express.session({ 
     secret: 'adasdasdasdasdasdasdasdasdasdasd' 
    })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(express.methodOverride()); 
    app.use(allowCrossDomain); 
    app.use(app.router); 
    app.use(express.static(clientDir)); 

}); 

Это похоже на работу, так как теперь я могу перейти к любому файлу из строки местоположения.

Я также настроен на использование PushState

Backbone.history.start({pushState: true}); 

Где я запутался в захвате первоначального вызова страницы и убедившись, что он попадает index.html. Однако он также должен проходить в каталогах, поэтому маршрутизатор BackBones знает, куда идти.

Пару неудачных попыток включают в себя:

app.get("*", function(req, res) { 
    fs.createReadStream(path.join(clientDir, 'index.html')).pipe(res); 
}); 

другой

app.get("*", function(req, res) { 
    res.redirect('http://localhost:3004#/'+req.url); 
}); 

другой

app.get('/', function(req, res){ 
    res.sendfile(path.join(clientDir, 'index.html')); 
}); 

любые идеи, было бы полезно.

Я открыт для других методов, таких как htaccess и т. Д., Хотя и не уверен, как это будет работать с развертываниями heroku.

ответ

2

Похоже, это работает для меня.

app.get('/*', function(req, res){ 
    res.sendfile(path.join(clientDir, 'index.html')); 
}); 
Смежные вопросы