寻找一种方法,如何运行相同的 PSGI $app
,以供多个请求运行 mount prefix
所定义的多个请求。如何在这样的screnario中 mount
?例如。假设我有app.psgi
use Plack::Builder;
my $defaultapp = sub { ... };
my $someapp = sub { ... };
my $otherapp = sub { ... };
builder {
mount '/some' => $someapp; # ok
#and here need something like:
mount "_regex_here" => $otherapp; #???
mount '/' => $defaultapp; #OK - last mount is the "default"
}
,例如,匹配的请求
-
/some/path
-要由$someapp
处理(这是可以的) -
/[A-Z]w+/w+.(xxx|yyy|zzz)$
-要通过$otherapp
处理 - 任何其他请求都需要由
$defaultapp
(也可以)处理
这可能是" damm -easy" - 但是我对Plack :: Builder的阅读没有给出答案。(MAUAL和示例中的每个mount
基于strict /path
...)
edit :如果mount
无法做到这一点,是否可以以某些 clean (不读取hackish)方式解决上述要求?我不需要更改PATH_INFO
,也不需要SCRIPT_NAME
(如URLMAP所做的那样) - 仅需要运行给定的$otherapp
,以适应匹配的请求。
edit2 :
更清楚。$someapp
和$otherapp
已经存在。尤其是$otherapp
是一个复杂的应用程序,以自己的方式处理每个请求的内容 - 但是可以通过REGEX来描述"属于$otherapp
"的请求。
我无法使用mount /fixed/prefix
,因为$otherapp
在运行时创建不同的URL,例如。例如,基于用户活动,它可以创建/Abc/xyz.eee
和/或/Zzz/uuu.ddd
等。因此,我不能前缀$otherapp
,例如:
mount '/other' => $otherapp
现在,要"导入"这个旧的 $otherapp
到新的基于PSGI的服务器,此外,$defaultapp
和$someapp
将对$otherapp
的数据做一些事情。这听起来很复杂,但实际上并非如此 - 只需要根据请求将REGEX运行$otherapp
,例如Apache的SetHandler somehandler *.ext
...
代码实际上是
push @{$self->{_mapping}}, [ $host, $location, qr/^Q$locationE/, $app ];
如您所见,$location
中没有支持的正则是,也许您可以通过提供来欺骗它,我不知道欺骗它的方法。'\Eregex_here\Q'
作为位置