2017-02-26 84 views
1

如何爲快遞指定一個catchall或實際上是一個catch [most],因此當用戶選擇實際包含在應用包中的頁面上的刷新時,GET不會失敗。如何爲Aurelia路由設置Express?

home.html的

<a href="profile">profile</a> 

app.js

config.map([ 
     { route: ['', 'home'], name: 'home', moduleId: 'home' }, 
     { route: ['profile'], name: 'profile', moduleId: './profile/profile'} 
    ]); 

如果我點擊個人資料鏈接上時,URL顯示本地主機://配置文件和頁面正確呈現不執行GET,因爲請求的資源已捆綁在最初的GET中。但可以說我使用localhost:// profile刷新頁面,然後它爲該頁面發出服務器GET請求。

如果服務器上我指定是這樣的:

app.use('/', express.static(__dirname)); 
app.use('/profile', express.static(__dirname)); 

它可以正常工作。我期待某種類型的捕獲所有格式,所以我不必爲捆綁了所有路由的應用程序添加所有可能的路線。喜歡的東西:

app.use('/*', express.static(__dirname)); 

那麼下面來捕獲GET的另一個應用

app.use('/othercoolapp/*', express.static(__dirname)+'/othercoolapp/'); 

但它不工作...

+0

您不必在服務器中創建路由。您只需配置pushState導航。類似https://gist.github.com/therebelrobot/747953c392d8a6ed5aaf#file-gistfile1-js-L28 –

+0

我確實有config.options.pushState = true;但是當用戶使用URL中的客戶端路由在瀏覽器上刷新刷新時,它將從服務器請求該路由。 (它沒有找到,因爲它現在捆綁在一起) – sday

+0

看起來像別人遇到了同樣的問題,奧裏利亞的作者也得出了同樣的結論。我需要爲所有內部客戶端URL提供基本應用程序。 https://github.com/aurelia/router/issues/157。我只是不知道如何爲服務器上的應用程序中的路由指定某種類型的正則表達式catch。 – sday

回答

1

這個問題你遇到適用於每一個單頁應用程序框架和庫啓用pushState路由。

你上面的app.listen或同等線是自舉您的Express服務器的文件中的代碼,添加如下內容:

app.get('*', function(request, response){ 
    response.sendFile(path.join(__dirname + '/index.html')); 
}); 

總的想法是,這個通用通配符路線將捕獲所有URL請求和發送index.html文件。這允許Aurelia處理它自己的路由。