我是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作为后端框架来获取和发布数据。
感谢您的帮助!
答案 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
的返回值作为返回值。