2014-02-21 75 views
2

我正在玩afBedSheet並希望處理所有到目錄的請求。 例如到/ ABCD的請求調用abcdMethod#DoSomething的如何路由到目錄?

我必須設置爲

@Contribute { serviceId="Routes" } 
static Void contributeRoutes(OrderedConfig conf) { 
    conf.add(Route(`/abcd/?`, abcdMethod#doSomething)) 
} 

航線然而,當我瀏覽到/ ABCD,我得到404錯誤:(

如何使?這項工作

回答

1

確保您的路由處理方法doSomething()確實帶任何參數例如,以下內容作爲Example.fan

using afIoc 
using afBedSheet 

class MyRoutes { 
    Text abcdMethod() { 
    return Text.fromPlain("Hello from `abcd/`!") 
    } 
} 

class AppModule { 
    @Contribute { serviceId="Routes" } 
    static Void contributeRoutes(OrderedConfig conf) { 
    conf.add(Route(`/abcd/?`, MyRoutes#abcdMethod)) 
    } 
} 

class Example { 
    Int main() { 
    afBedSheet::Main().main([AppModule#.qname, "8080"]) 
    } 
} 

而且隨着運行:

> fan Example.fan -env dev 

(追加-env dev將列出404頁上的所有可用路由)

因爲/abcd/?一直尾隨?,它將匹配兩個文件http://localhost:8080/abcd的URL和http://localhost:8080/abcd/的目錄URL。但請注意,不會與匹配/abcd中的任何網址。

要匹配文件裏面/abcd,一個URI參數添加到您的路線方法(捕捉路徑),並改變你的路線:

/abcd/** only matches direct descendants --> /abcd/wotever 

/abcd/*** will match subdirectories too --> /abcd/wot/ever 

例如:

using afIoc 
using afBedSheet 

class MyRoutes { 
    Text abcdMethod(Uri? subpath) { 
    return Text.fromPlain("Hello from `abcd/` - the sub-path is $subpath") 
    } 
} 

class AppModule { 
    @Contribute { serviceId="Routes" } 
    static Void contributeRoutes(OrderedConfig conf) { 
    conf.add(Route(`/abcd/***`, MyRoutes#abcdMethod)) 
    } 
} 

class Example { 
    Int main() { 
    afBedSheet::Main().main([AppModule#.qname, "8080"]) 
    } 
}