最近、私は Dancer と協力してアプリケーションを作成していますが、ルートを定義する方法を理解するのに苦労しています。
package MyApp;
use Dancer ':syntax';
our $VERSION = '0.1';
# Base for routing of requests
# Match against /:validate
any '/:validate' => sub {
# This assumes we can stop the routing here
# validate the request param in the url string
# against a regex and 'pass' the request to a
# specific route with the 'var' option
var validate => params->{validate};
.....
# Validation works and dancer passes successfully
pass();
};
# This is the part that is not working
prefix '/info' => sub {
..... # does stuff
}; ## back to the root
パスのダンサー ログ:
[25561] コア @0.001133> [ヒット #1] 一致する最後のルートが渡されました! /usr/local/share/perl5/Dancer/Route.pm l. 216
パス後のすべてのダンサー ログ:
[25781] core @0.001524> [hit #4] /usr/local/share/perl5/Dancer/ の /^/info$/ ('/info' から生成) に対して 'GET /11121/info/' を照合しようとしていますRoute.pm l. 84 [25781] コア @0.002041> [ヒット #4] 応答: 404 in /usr/local/share/perl5/Dancer/Handler.pm l. 179
それはおそらく私が見逃している単純なものですが、これまでのところ運がありません。どんな助けでも大歓迎です。
EDIT私はprefix間違って使用していたことに気づいたので、それを修正し、悪い説明をお詫びします。localhost:3000/12/簡単に言うと、たとえばURL の最初の部分はデータベース レコードです。すべてのルートは、URL 文字列の最初の部分であるそのレコードに基づいて構築されているため、ルートにさらに進む前に検証したいと考えています。
それをつかんで params ハッシュを操作できるフックをセットアップできましたbeforeが、現在、一致しないパターンで 500 エラーが発生しています。
hook before => sub {
my $route_handler = shift;
var record => params->{record};
my $record = var 'record';
while ($record !~ m/^ID[\-]\d{3,6}$/) { # Check for valid ID
if ($record =~ m/^\d{3,6}$/) { # Works currently
$record = 'ID-'.$record;
}else {forward "/error"}; # this = 500 ISE error
}
};
forwardandを試してみましたsend_errorが、どちらも ISE を生成し、Dancer はログの最後のエントリでこれを報告します。
29661] core @0.001048> [hit #2] /usr/local/share/perl5/Dancer/Hook.pm l. 58
私の質問をより明確にするための編集も歓迎します。