如何在Dancer中接收json?

时间:2016-02-09 22:27:33

标签: perl dancer

我是Perl框架Dancer的新手。截至目前,我有一个获取http监听器工作。我有一个Angular框架试图将一个json字符串发布到Dancer。我怎样才能检索json并将其分配给标量变量($ json)。

get '/games' => sub {
    header 'Access-Control-Allow-Origin' => '*';
    &loadgames();
    return $games;
};

post '/newgame' => sub {
    header 'Access-Control-Allow-Origin' => '*';
    #what should i put here to retrieve the json string
    #I plan to pass the json string to a sub to convert to XML
};

我不确定如果我选择Dancer作为后端框架来获取和发布数据。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果您的HTTP请求具有JSON正文(Content-type: application/json)而不是HTML表单帖子,那么您可能需要这样的内容:

post '/url-path' => {
    my $post = from_json( request->body );
    # do something with the POSTed data structure
    # which would typically be a hashref (or an arrayref)
    # e.g.: schema->resultset('Widget')->create($post);
}

from_json例程是Dancer提供的DSL Keywords之一。

答案 1 :(得分:0)

Dancer提供params关键字来访问路由,正文和查询参数。你想要一个身体参数。您希望哪个正文参数取决于您将其发布到路径的字段的名称(查看您的表单或您的ajax请求)。

my $json_string = params('body')->{$field_name}

如果您在路线或查询参数中没有任何冲突的参数名称,也可以使用param

一旦你拥有了json,请记住它现在只是一个字符串。您可能希望将其读入perl数据结构:Dancer为此目的提供from_json

顺便说一句:我注意到你的获取路径,你在void上下文中调用一个函数loadgames,然后返回一个你尚未声明的变量(或者你可能已将它设置为全局 - 但你需要它成为一个全球性的吗?)。我建议使用use strict;开始每个perl文件以获取这样的问题。我怀疑你可能只想使用loadgames的返回值作为返回值。