【问题标题】:Optional POST Parameters in Mojolicious Lite with Perl带有 Perl 的 Mojolicious Lite 中的可选 POST 参数
【发布时间】:2015-09-23 14:11:59
【问题描述】:

有没有办法使用 Mojolicious Lite 在 Perl 中将 POST 参数表示为可选参数?例如,如果请求正文中没有定义param2,有没有办法让服务器不返回404?

post "/my_post" => \&render(post_callback);

sub post_callback {
    my ($mojo) = @_;
    my $param1 = $mojo->param("param1");
    my $param2 = $mojo->param("param2");
}

【问题讨论】:

  • 很确定它没有。它只是将param2 设置为undef。如果你得到 404,那是因为你的回调没有渲染任何东西。
  • 如果它被路由到正确的回调,它不应该总是返回 404 以外的东西吗?我的问题是它甚至没有被路由到正确的回调。虽然如果我同时指定 param1param2 它将被路由到 post_callback 并返回 200。
  • 没有。 Mojolicious 在被告知时会渲染一些东西。有时它会隐式执行此操作。尝试在回调结束时添加:$mojo -> render ( text => "It worked" );
  • 太好了,非常感谢您的帮助!
  • 没问题,待命...

标签: perl mojolicious mojolicious-lite


【解决方案1】:

我的问题是我误解了 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 请求。

【讨论】:

    【解决方案2】:

    在帖子中,我不喜欢使用参数,而是将所有参数发布在一个 JSON 字符串中。 mojolicous post-action 将接收 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
    

    【讨论】:

      猜你喜欢
      • 2012-10-03
      • 2019-06-07
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2013-03-20
      • 2011-10-25
      • 1970-01-01
      相关资源
      最近更新 更多