我正在玩afBedSheet并希望处理对目录的所有请求。 例如,对/ abcd的请求调用abcdMethod#doSomething
我将路线设置为
@Contribute { serviceId="Routes" }
static Void contributeRoutes(OrderedConfig conf) {
conf.add(Route(`/abcd/?`, abcdMethod#doSomething))
}
然而,当我浏览/ abcd时,我得到404错误:(
我如何使这项工作?
答案 0 :(得分:1)
确保您的路由处理程序方法doSomething()
执行 NOT 获取任何参数。例如,将以下内容另存为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
的文件网址和http://localhost:8080/abcd/
的目录网址。但请注意,不会匹配/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"])
}
}