2013-07-03 48 views
0

我正在編寫一個單頁網頁應用程序的網站(網站的其餘部分只是提供的靜態文件)。我正在嘗試編寫一箇中間件以便將所有請求按照模式'example.com/app'重定向到'example.com/app',以便請求諸如'example.com/app/my/specific/頁面'將全部導致發送相同的頁面。關鍵問題在於,瀏覽器地址欄中的網址不能更改,以便JavaScript應用本身可以解釋它並顯示正確的內容。如何重定向到快速單頁Web應用程序中的節點

我可以做這樣的事情:

app.use('/app', function (req, res) { 
    res.redirect('/app'); 
}); 

然而,這會導致頁面的URL來改變和一個單獨的HTTP請求assumedly製成。

最明顯的替代解決方案是做這樣的事情:

app.use('/app', function (req, res) { 
    res.sendfile(__dirname + '/public/app/index.html'); 
}); 

這裏的問題是,從頁面資源,如「example.com/app/my/specific/page/」將請求後看在錯誤的位置。例如,如果我在頁面上有圖像,那麼它會查找example.com/app/my/specific/page/image.jpg。由於沒有圖像返回,它不會顯示在頁面上。這發生在所有外部腳本或樣式表中。

我也嘗試過這樣的事情:

app.use('/app', function (req, res) { 
    res.sendfile(__dirname + '/public/beta' + url.parse(req.url).pathname); 
}); 

但是這是非常愚蠢的我的原因很明顯。

+0

這是可能的嗎?我想我可以發回一段數據(可能在查詢字符串中)被應用程序用來更新網址 –

回答

0

最後,我用這個中間件服務於應用程序的頁面時適當

// all unmatched requests to this path, with no file extension, redirect to the dash page 
app.use('/dash', function (req, res, next) { 
    // uri has a forward slash followed any number of any characters except full stops (up until the end of the string) 
    if (/\/[^.]*$/.test(req.url)) { 
     res.sendfile(__dirname + '/public/dash/index.html'); 
    } else { 
     next(); 
    } 
}); 

我然後設置使用base HTML元素與href屬性指向根。

0

如果你仍然在努力完成這項工作,我可能會找到一個出發點。 Alexander Beletsky擁有Backbone.js + Express SPA樣板庫。Located Here

有關它是如何出現的簡短文章,您可以閱讀他的文章Dzone

+2

請注意,[僅限鏈接回答](http://meta.stackoverflow.com/tags/link-only-answers/info),所以SO答案應該是搜索解決方案的終點(而另一個引用的中途停留時間往往會隨着時間的推移而變得過時)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra

相關問題