1

最近、私は 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

私の質問をより明確にするための編集も歓迎します。

4

2 に答える 2

2

それはプレフィックスが行うことではありません。Prefix は、現在のパッケージ内のルートのプレフィックスを宣言するために使用されます。

prefix '/users';
get '/' => sub { ... };         # matches /users
post '/add' => sub { ... };     # matches /users/add
get '/view/:id' => sub { ... }; # matches /users/view/123
于 2013-12-08T20:56:53.913 に答える