Радостный Угловой POST JSON
Я новичок в Perl и Mojo, и у меня есть одна проблема при получении POST-данных из Angular:
Мой 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));
})
Мой Mojo-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 Не найдено Дата: Пт, 20 января 2017 09:49:57 GMT
Что случилось? Мне кажется, что $json = $self->req->json не получает JSON-String из POST?
4 ответа
Angular передает сообщения через тело запроса, поэтому я так и поступаю.
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 будут использовать параметры, а не тело.
404 Not Found
указывает на то, что ресурс не найден. Пожалуйста, проверьте, если ваша заявка доступна подhttp://localhost/perltest/perltest.pl/post
,Вы не должны использовать print(), потому что это ненадежно (иногда это работает, а иногда нет). Если вы хотите записать текст в консоль, используйте $self->app->log->debug(). Mojolicious также имеет $self->dumper, вам не нужно включать внешний модуль
Data::Dumper
,Проверьте данные, которые действительно отправляются. Вы можете использовать такой сервис, как http://requestb.in/. Если вы получите правильный JSON; Я бы сильно ожидал, что URL не правильный (см. Пункт 1.)
Документы для json
метод сказать, что 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
, но я не уверен.
Я не думаю, что вы должны JSON-привести в порядок свой объект.
Попробуйте заменить вашу первую угловую линию следующим образом:
var datainput = {test: "orcl"};