2015-06-23 92 views
-1

目前我有什麼是添加URL友好蛞蝓

http://www.example.com/_id

而不是我想我的帖子顯示在url標題的URL顯示產生id。如

http://www.example.com/this_is_a_new_post

我一定要添加slug場集合中的呢?是不是有任何解決方案,我可以使一個友好的網址,我不必使另一個多餘的領域,如slug

P.S.我不想使用包。我想這可以在沒有包裝的情況下輕鬆完成。

+0

您使用的是鐵:路由器 – Kriegslustig

+0

是我使用的路由 – syed

回答

0

你可以做的最簡單的事情就是使用/:title。鐵會自動解碼標題。 Firefox很好地處理這樣的URL。它只是轉換它們,所以用戶會看到包含所有特殊字符的實際標題。而且,所有的鐵幫助者都正確地編碼了URL字符串。

要創建可以使用這樣的功能的毛坯:

createURLSlug = function (url) { 
    var slugRegex = /[^\w\-\.\~]/g 
    while(slugRegex.test(url)) { 
    url = url.replace(slugRegex, '-') 
    } 
    return url 
} 

我用wiki page on of allowed URL characters作爲這個表達式的參考。

如果您正在使用SimpleSchema你也可以使用一個autoValue:

... 
    slug: { 
    type: String, 
    autoValue: function() { 
     return createURLSlug(this.field('title').value) 
    } 
    } 
... 
+0

爲了這個,我需要建立一個'slug'場收藏權?這不是多餘的嗎?並在路由器而不是'/:slug'我需要返回'/:title'? – syed

+0

是的,我會爲它創建一個單獨的字段,是的它會是多餘的。但是你也可以調用大多數緩存中的信息。使用'slug'字段作爲*高速緩存*將使您在每次調用路由時都可以運行該函數。你將需要使用'/:slug'作爲路徑的路徑。 – Kriegslustig

+0

我在使用此解決方案時出現錯誤。我正在使用簡單的模式和autoform。我在嘗試提交表單時遇到此錯誤。不過我嘗試在autoform中使用'hooks',但無濟於事。由於autoValues並未添加默認情況下autoform我使用[清理autovalue](https://github.com/aldeed/meteor-autoform#normal)從文檔。 – syed