2015-06-23 96 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