【发布时间】:2020-05-07 03:13:35
【问题描述】:
我不想让 perl dancers 默认 404 “对不起,这是空白。”当找不到匹配的路由时会出现响应。发生这种情况时,我还需要执行一些其他任务,例如错误记录。
这是我在创建默认路线时遵循的舞者文档。 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
有人可以帮忙吗?我确实有多个路由文件,这可能是问题的一部分吗?
谢谢
【问题讨论】:
-
你还有哪些路线?是否也有不同的包罗万象?还是你在配置文件中设置了错误模板?
-
您在进行更改后是否重新启动了您的应用程序?您是否在
views/目录中创建了test_error_template.tt?您是否在环境配置文件中将show_errors设置为0?尝试取消设置。查看应用程序的日志,看看是否有其他东西正在尝试响应您的请求,然后再全面了解它。您可能应该向我们展示所有代码,以便我们为您提供适当的帮助。 -
@simbabque 还有很多其他路线,但我检查并确保没有其他路线。这是一个拥有数千条生产线的大型生产系统,其他开发人员已经在它上面工作过。未设置错误模板文件。我可以这样做,但我仍然需要在它发生时进行捕捉,以便我可以做一些自定义日志记录和其他事情。
-
@simbabque 在开发环境中我让它在每次页面加载时重新编译以节省重新启动的需要。是 test_error_template.tt 在 views/ 中。我还没有在配置中检查 show_errors ,好点。我很乐意提供更多代码,但所有代码都太多了,因为主路由文件超过 6000 行。
-
@ikegami 是的,钩子根本没有被调用。不过我确实发现了一些东西。所以在顶部我有
prefix '/u/:user';,如果我删除它,默认路由就起作用了。抱歉,我知道如果我发布了我所有的代码,有人会看到这一点,但还有很多需要修剪的地方,我想让我的 OP 保持干净和直截了当。所以基本上文档中的默认路由示例是在没有 url 前缀的假设下工作的。我只需要弄清楚如何修改它,这样它就会捕获所有内容。