Perl Dancer2 默认路由失败
Perl Dancer2 default route failing
我不想让 perl dancers 默认 404 "Sorry, this is the void." 响应在找不到匹配的路由时出现。我还需要做一些其他任务,例如在发生这种情况时记录错误。
这是我在创建默认路线时遵循的舞者文档。
https://metacpan.org/pod/Dancer2::Cookbook#Default-Route
这是我主要路线文件底部的内容
any qr{.*} => sub {
status 404;
template 'test_error_template', { path => request->path };
};
问题是如果请求的路由无效,我仍然会收到默认的 dancer 404 消息。不知何故这条路线没有被拾起。
如果我尝试去一条不存在的路线
,这就是 development.log 中出现的内容
[server:5931] core @2020-01-22 10:31:55> looking for get /non_existing_route in /usr/share/perl5/vendor_perl/Dancer2/Core/App.pm l. 36
[server:5931] core @2020-01-22 10:31:55> Entering hook core.error.init in (eval 230) l. 1
[server:5931] core @2020-01-22 10:31:55> Entering hook core.error.before in (eval 230) l. 1
[server:5931] core @2020-01-22 10:31:55> Entering hook core.error.after in (eval 230) l. 1
有人可以帮忙吗?我有不止一个路由文件,这可能是问题的一部分吗?
谢谢
所以在我的例子中,问题是在路由文件中设置了前缀。除非我在 url 中包含前缀,否则不会触发默认路由。例如 /myprefix/invalid_route
将调用默认路由,但仅调用 /invalid_route
不会,从而导致 404 错误。我还没有完全想出解决办法,但这至少回答了我原来的问题。
编辑:
解决了。我创建了一个新的路由文件 default.pm,它只包含带有前缀 '/' 的默认路由,并将其放在 app.psgi 的最后。这样只有在所有其他方法都失败时才能到达。
app.psgi
#!/usr/bin/env perl
use strict;
use warnings;
use main_routes;
use default;
myapp->to_app;
default.pm
package default;
prefix '/';
any qr{.*} => sub {
#log and do other stuff here
return 'my default route';
};
true;
我不想让 perl dancers 默认 404 "Sorry, this is the void." 响应在找不到匹配的路由时出现。我还需要做一些其他任务,例如在发生这种情况时记录错误。
这是我在创建默认路线时遵循的舞者文档。 https://metacpan.org/pod/Dancer2::Cookbook#Default-Route
这是我主要路线文件底部的内容
any qr{.*} => sub {
status 404;
template 'test_error_template', { path => request->path };
};
问题是如果请求的路由无效,我仍然会收到默认的 dancer 404 消息。不知何故这条路线没有被拾起。
如果我尝试去一条不存在的路线
,这就是 development.log 中出现的内容[server:5931] core @2020-01-22 10:31:55> looking for get /non_existing_route in /usr/share/perl5/vendor_perl/Dancer2/Core/App.pm l. 36
[server:5931] core @2020-01-22 10:31:55> Entering hook core.error.init in (eval 230) l. 1
[server:5931] core @2020-01-22 10:31:55> Entering hook core.error.before in (eval 230) l. 1
[server:5931] core @2020-01-22 10:31:55> Entering hook core.error.after in (eval 230) l. 1
有人可以帮忙吗?我有不止一个路由文件,这可能是问题的一部分吗?
谢谢
所以在我的例子中,问题是在路由文件中设置了前缀。除非我在 url 中包含前缀,否则不会触发默认路由。例如 /myprefix/invalid_route
将调用默认路由,但仅调用 /invalid_route
不会,从而导致 404 错误。我还没有完全想出解决办法,但这至少回答了我原来的问题。
编辑:
解决了。我创建了一个新的路由文件 default.pm,它只包含带有前缀 '/' 的默认路由,并将其放在 app.psgi 的最后。这样只有在所有其他方法都失败时才能到达。
app.psgi
#!/usr/bin/env perl
use strict;
use warnings;
use main_routes;
use default;
myapp->to_app;
default.pm
package default;
prefix '/';
any qr{.*} => sub {
#log and do other stuff here
return 'my default route';
};
true;