2017-01-20 11 views
0

私はPerlとモジョに新しいですし、私は角度からPOST-データを受信することにより、一つの問題を持っている:Mojoliciousの角度POST JSON

私AngularCodeは

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)); 
    }) 

私のモジョ-SUBは次のようになりますされています。

post '/post' => sub { 
my $self = shift; 

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

私が得る結果は次のとおりです。 $ VAR1 = undefを。コンテンツの長さ:0ステータス:404が見つかりません日付:2017年1月20日金曜日09:49:57 GMT

何が問題なのですか? $ json = $ self-> req-> jsonがPOSTからJSON-Stringを取得していないようです。

+0

あなたはMojoで 'print'するつもりはありません。あなたは何かを返す必要があります。また、どのようにあなたのアプリを実行している? 「morbo」と? – simbabque

+0

[編集]リンクを使用して、質問に回答として投稿した新しい情報を[編集]してください。それからその答えを削除してください。あなた自身でそれをしないと、コミュニティによって下落され、削除されます。 – simbabque

+0

$ self-> app-> log-> debug($ self-> dumper(...))を使ってprint()を使わないでください。 Print()は信頼できません。 – user3606329

答えて

0

docs for the json methodは、デコードがうまくいかなかった場合、または要求が空の場合にundefが返されたことを示します。最初にリクエストの本文を確認する必要があります。

warn Dumper $self->req->body; 

これにより、生の要求本体がアプリケーションコンソールまたはログに出力されます。 morbo app.plを実行すると、それがコンソールウィンドウになります。あなたが見るものを見てください。コンテンツはそこにありますか?コンテンツタイプは正しいですか?

それからそこから取り出してください。


ルートハンドラの途中では、ただprintにすることはできません。アプリケーションオブジェクトを使用してrenderコンテンツにする必要があります。

post '/post' => sub { 
    my $self = shift; 
    my $json = $self->req->json; 

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

このように、Mojoliciousはすべてのことを処理します。コンテンツタイプを明示的に設定する必要もありません。それは自動的に賢明なものを使うつもりです。

ただし、404が戻ってきています。それはprintのためかもしれませんが、わかりません。

+1

私は、何も描画されないので、彼は404を得ると思う。 –

+0

@Helmutは可能ですが、それは本当に_見つからないのですか? – simbabque

1
  1. 404 Not Foundは、リソースが見つからないことを示します。お申し込みがhttp://localhost/perltest/perltest.pl/postの場合はもう一度ご確認ください。

  2. 信頼できない(時にはうまく動作しないことがある)ため、print()は使用しないでください。コンソールにテキストを記録する場合は、$ self-> app-> log-> debug()を使用してください。 Mojoliciousにも$ self-> dumperがあるので、外部モジュールData::Dumperを含める必要はありません。

  3. 実際に送信されるデータを確認してください。 http://requestb.in/のようなサービスを使用できます。あなたが正しいJSONを受信した場合。

0

私はあなたのオブジェクトをJSON文字列にするとは思わないと思います。

は、これであなたの最初の角の行を交換してみてください:

var datainput = {test: "orcl"}; 
0

角度は、要求の本体経由で記事を渡すので、これは私がそれらを処理する方法です。

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投稿は、本体ではなくパラメータを使用します。