2

afBedSheet をいじっていて、ディレクトリへのすべてのリクエストを処理したいと考えています。たとえば、/abcd へのリクエストは abcdMethod#doSomething を呼び出します

ルートを次のように設定しました

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

しかし、/abcd を参照すると、404 エラーが発生します :(

どうすればこれを機能させることができますか?

4

1 に答える 1

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/?末尾に があるため?、 のファイル URLhttp://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"])
  }
}
于 2014-02-21T08:31:52.773 に答える