首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mojolicious POST JSON

Mojolicious POST JSON
EN

Stack Overflow用户
提问于 2017-01-20 17:53:40
回答 4查看 709关注 0票数 0

我是Perl和Mojo的新手,在从Angular接收POST数据时遇到了一个问题:

我的AngularCode是

代码语言:javascript
复制
var datainput = JSON.stringify({"test":"orcl"});
$http.post('http://localhost/perltest/perltest.pl/post', datainput)
        .success(function(data, status, headers, config) {
        console.log("post geschickt");
        console.log(headers());
        console.log(data);
        console.log("data back: " + JSON.stringify(data));
        alert(JSON.stringify(data));
    })

我的Mojo-Sub看起来像:

代码语言:javascript
复制
post '/post' => sub {
my $self = shift;

my $json = $self->req->json;
print header(-type => "text/html"); 
print Dumper($json->{test});
};
app->start;

我得到的结果是:$VAR1 = undef;Content-Length: 0状态: 404未找到日期:星期五,2017年1月20日09:49:57 GMT

怎么啦?在我看来,$json = $self->req->json没有从POST中获得JSON-String?

EN

回答 4

Stack Overflow用户

发布于 2017-02-27 07:14:36

Angular通过请求的主体传递帖子,所以这就是我处理那些帖子的方式。

代码语言:javascript
复制
post '/post' => sub {
    my $self = shift;
    my $json = $self->req->body;
    #use Mojo::JSON qw(decode_json encode_json) at top of app
    my $perl_hash = decode_json($json)
    #Do something with the hash, like pass to a helper or model
    $self->render(json => $return_from_model_or_helper);
};

Jquery post将使用params而不是body。

票数 2
EN

Stack Overflow用户

发布于 2017-01-20 19:21:59

docs for the json method表示,如果解码不起作用或请求为空,则返回undef。您应该首先查看请求正文。

代码语言:javascript
复制
warn Dumper $self->req->body;

这会将原始请求正文输出到您的应用程序控制台或日志。如果您运行morbo app.pl,则这是您的控制台窗口。看看你看到了什么。内容在那里吗?内容类型是否正确?

那就从那里开始吧。

您不能只在路由处理程序中间使用print。您需要使用render对象来应用您的内容。

代码语言:javascript
复制
post '/post' => sub {
    my $self = shift;
    my $json = $self->req->json;

    $self->render( text => $json->{test} );
};

这样,Mojolicious会为你处理所有的事情。也不需要显式设置内容类型。它会自动使用一些合理的东西。

但是,你会拿回404分。这可能是因为print,但我不确定。

票数 1
EN

Stack Overflow用户

发布于 2017-01-21 01:44:21

  1. 404 Not Found表示找不到该资源。请仔细检查您的应用程序是否在http://localhost/perltest/perltest.pl/post.
  2. You下可用不应该使用print(),因为它不可靠(有时有效,有时无效)。如果您想要将文本登录到控制台,请使用$self->app-> log ->debug()。Mojolicious也有$self->转储,你不需要包括外部模块Data::Dumper.
  3. Check实际发送的数据。您可以使用像http://requestb.in/这样的服务。如果你收到的JSON是正确的,我强烈期望这个URL是不正确的(见第一点)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41760648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档