使用Perl在Mojolicious Lite中提供可选的POST参数

使用Perl在Mojolicious Lite中提供可选的POST参数,perl,mojolicious,mojolicious-lite,Perl,Mojolicious,Mojolicious Lite,有没有一种方法可以在Perl中使用Mojolicious Lite将POST参数表示为可选的?例如,如果请求正文中未定义param2,是否有方法使服务器不返回404 post "/my_post" => \&render(post_callback); sub post_callback { my ($mojo) = @_; my $param1 = $mojo->param("param1"); my $param2 = $mojo->par

有没有一种方法可以在Perl中使用Mojolicious Lite将POST参数表示为可选的?例如,如果请求正文中未定义
param2
,是否有方法使服务器不返回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守护进程运行此程序,您将能够使用任何参数组合发送POST请求

在post中,我不喜欢使用参数,而是将所有参数发布在一个JSON字符串中。 mojolicous post操作将接收json字符串作为哈希引用

例如:

# 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可以轻松测试立柱:

curl -X POST -d '{ "username": "rob", "password": "secret" }' http://hp-probook:3000/users/authenticate

很肯定不会。它只是将
param2
设置为
undef
。如果你得到404,那是因为你的回调没有呈现任何东西。如果它被路由到正确的回调,它不应该总是返回404之外的东西吗?我的问题是,它甚至似乎没有被路由到正确的回调。虽然如果我同时指定
param1
param2
,它将被路由到
post\u callback
并返回200.No。Mojolicous在被告知时呈现某些内容。有时它会隐式地这样做。尝试添加:
$mojo->render(text=>“它工作了”)在您的回调结束时。非常好,非常感谢您的帮助!当然可以,待命。。。