【问题标题】:Perl Dancer index.cgi for all requestsPerl Dancer index.cgi 用于所有请求
【发布时间】:2014-03-31 23:56:32
【问题描述】:

我正在尝试在我的第一个应用程序中使用 Perl Dancer 模块。第一个应用程序创建了一个名为 MyWeb-App/bin/app.pl 的文件,其中包含以下代码:

use Dancer;
use MyWeb::App;
dance;

一个名为 MyWeb-App/lib/MyWeb/App.pm 的文件包含以下代码:

package MyWeb::App;
use Dancer ':syntax';

our $VERSION = '0.1';

get '/' => sub {
    template 'index';
};

true;

我想要一个 index.cgi 文件来服务我所有的应用程序请求。我的问题是, 我是否必须将所有操作/方法放在同一个 MyWeb-App/bin/app.pl 文件和模块中 对于每个动作/方法,例如 MyWeb-App/lib/MyWeb/App.pm 模块。

原因是我的应用程序将包含数百个这样的操作:

get 'register' => sub {...};
post 'save_register' => sub {...};
get 'contactus' => sub {...};
post 'save_contactus' => sub {...};
.....
get 'order' => sub {...};
post 'process_order' => sub {...};

所以我是否必须将所有类似的操作放在一个主 index.cgi 中,并且每次为应用程序添加新操作或新模块时都必须修改此文件。

简而言之,如何以模块化的方式制作具有大量动作的应用程序,以便在一个模块文件中的每个动作都易于维护,尽管其他开发人员可以向应用程序添加单独的模块,而不会重叠/破坏主 index.cgi。

在我的常规无框架应用程序中,我只加载基于路由/动作的模块,所以我只为每个动作的每个路由加载一个模块,逻辑如下:

if ($route eq "register") { eval "use register.pm"; register(); }

elsif ($route eq "save_register") { eval "use register.pm"; save_register(); }
....
....
elsif ($route eq "contactus") { eval "use contactus.pm"; contactus(); }

【问题讨论】:

  • 我建议将您的第二个问题作为一个实际的单独问题发布。
  • @ysth 我按照你的建议做了

标签: perl dancer


【解决方案1】:

'index.cgi' 不在 Perl Dancer 中使用。

该框架旨在让您将应用程序分解为一堆逻辑模块。以有意义的方式对它们进行分组。例如,对于带有照片的论坛应用程序,您可能有一个“用户”模块、一个“消息”模块和一个“照片”模块。

在 app.pl 中,您将拥有:

 use Dancer;
 use MyWeb::Users;
 use MyWeb::Messages;
 use MyWeb::Photos;
 dance;

然后,您将在 ./lib 中创建 3 个不同的 .pm 文件,例如 users.pm、messages、pm、photos.pm 等,然后包含每个模块的相关路由。您的路线可能以 /user/、/message/ 和 /photo/* 开头。例如 POST /user、GET /user 等。考虑使用前缀函数。

这应该使您的项目易于管理,并且您的路线井井有条。随着项目的增长和添加更多模块,您只需修改 app.pl 并包含新模块(和路由)。

【讨论】:

  • 你是对的,这是我的问题,如果我的应用程序是 500 个模块,这意味着 app.pl(这是我的 index.cgi)将在每次请求时加载这 500 个模块,以防使用 CGI这可能很慢。这是我关于Dancer逻辑的主要问题,为什么不只根据路由加载解析的模块。
  • 不,app.pl 执行一次,当你第一次启动你的服务器时(事实上,如果你正在开发并且你改变了 app.pl 或者你的任何模块,你必须重新启动你的服务器) .如果您有 500 条路由,则速度将基于解析 URL 并确定哪条路由。这实际上相当快,肯定比大型 index.cgi 文件快得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
相关资源
最近更新 更多