带有 Perl 的 Mojolicious Lite 中的可选 POST 参数
Optional POST Parameters in Mojolicious Lite with Perl
有没有一种方法可以使用 Mojolicious Lite 将 POST 参数表示为 Perl 中的可选参数?例如,如果请求正文中未定义 param2
,是否有办法使服务器不 return 404?
post "/my_post" => \&render(post_callback);
sub post_callback {
my ($mojo) = @_;
my $param1 = $mojo->param("param1");
my $param2 = $mojo->param("param2");
}
我的问题是我误解了 mojolicious 是如何路由到回调的。以下代码适用于两个可选参数:
#!/usr/bin/env perl
use strict;
use warnings;
use Mojolicious::Lite;
post '/' => sub {
my ($mojo) = @_;
my $param1 = $mojo->param("param1");
my $param2 = $mojo->param("param2");
$mojo->render(text => "param1: $param1, param2: $param2");
};
app->start;
如果您 运行 使用此方法:./my_server.pl daemon
您将能够使用任意参数组合发送 POST 请求。
在 post 中,我不喜欢使用参数,而是 post 在一个 JSON 字符串中使用所有参数。
mojolicous post-action 将接收 json-string 作为哈希引用。
示例:
# The posted data looks like:
# '{ "username": "rob", "password": "secret" }'
#
sub authenticate {
my $self = shift;
my $jsonHash = $self->req->json ;
$self->render( text => Dumper($jsonHash)) ;
}
使用 curl 很容易测试 post:
curl -X POST -d '{ "username": "rob", "password": "secret" }' http://hp-probook:3000/users/authenticate
有没有一种方法可以使用 Mojolicious Lite 将 POST 参数表示为 Perl 中的可选参数?例如,如果请求正文中未定义 param2
,是否有办法使服务器不 return 404?
post "/my_post" => \&render(post_callback);
sub post_callback {
my ($mojo) = @_;
my $param1 = $mojo->param("param1");
my $param2 = $mojo->param("param2");
}
我的问题是我误解了 mojolicious 是如何路由到回调的。以下代码适用于两个可选参数:
#!/usr/bin/env perl
use strict;
use warnings;
use Mojolicious::Lite;
post '/' => sub {
my ($mojo) = @_;
my $param1 = $mojo->param("param1");
my $param2 = $mojo->param("param2");
$mojo->render(text => "param1: $param1, param2: $param2");
};
app->start;
如果您 运行 使用此方法:./my_server.pl daemon
您将能够使用任意参数组合发送 POST 请求。
在 post 中,我不喜欢使用参数,而是 post 在一个 JSON 字符串中使用所有参数。 mojolicous post-action 将接收 json-string 作为哈希引用。
示例:
# The posted data looks like:
# '{ "username": "rob", "password": "secret" }'
#
sub authenticate {
my $self = shift;
my $jsonHash = $self->req->json ;
$self->render( text => Dumper($jsonHash)) ;
}
使用 curl 很容易测试 post:
curl -X POST -d '{ "username": "rob", "password": "secret" }' http://hp-probook:3000/users/authenticate