【发布时间】:2016-05-04 22:30:12
【问题描述】:
我看到的所有与 Dancer2 和数据库连接相关的代码示例都将所有 Dancer2 代码直接放在附加到各种“get”和“put”请求的匿名子例程中。
我想以 myServices.pm 文件本质上只是一个路由到包含正在执行的内容的其他代码文件的方式来组织我的代码。我可以在 MyServices::Submission 模块中成功使用 params 关键字。但是,在这种情况下,我似乎无法使用 Dancer2::Plugin::Database 中的 database 关键字。
myServices.pm:
package myServices;
use Dancer2;
use Dancer2::Plugin::REST;
use Dancer2::Plugin::Database;
use Data::Dumper;
use MyServices::Submission;
get '/direct' => sub {
my $dbh = database;
return 'success';
};
get '/indirect' => sub {
MyServices::Submission::databaseTest();
};
true;
MyServices/Submission.pm:
package MyServices::Submission;
use Dancer2;
use Dancer2::Plugin::REST;
use Dancer2::Plugin::Database;
use Data::Dumper;
sub databaseTest{
my $dbh = database;
return 'success';
}
true;
对 /direct 的调用返回“成功”。
对 /indirect 的调用返回错误 500 - 内部服务器错误,并显示消息“如果没有提供设置,就无法获得数据库连接!”。然后它会打印出我的设置,包括正确的数据库配置。
我的配置文件一定没问题,因为调用 /direct 是成功的。
问:
- 其他人可以复制这种行为吗? (确保我没有失踪 很明显的东西。)
- 有没有办法在 MyServices::Submission 模块中成功使用 Dancer2::Plugin::Database,或者 我是否需要搜索另一个数据库连接解决方案才能 满足我的代码组织需求?
【问题讨论】:
-
我注意到的第一件事是,您的模块没有返回真实值。将
1;作为每一行的最后一行。 -
相关的网络服务器错误日志条目可能会对问题有一些有价值的输入......
-
当您在提交模块中调用
use Dancer2;时,您实际上是在创建一个单独的 Dancer2 应用程序。见What's in an appname? -
@ThisSuitIsBlackNot 谢谢!那正是我的问题。提交答案,我会接受。