Trong mã perl Mojolicious của tôi, tôi xử lý một công việc được tạo và xem từ một ứng dụng khách từ xa.Toàn cầu và Chủ đề trong Mojolicious để xử lý các đường dẫn khác nhau
Tôi giữ các công việc trong một mảng băm, đây là biến toàn cục.
Sau đó nó được sử dụng trong trình xử lý PUT '/ job/create' và GET '/ job/status'. Khi thêm một công việc mới với PUT '/ job/create', mảng được mở rộng trong chương trình con (nó chứa 4 phần tử trong mã bên dưới), nhưng khi yêu cầu trạng thái công việc thông qua GET '/ job/status' danh sách các công việc , mảng không chứa các phần tử được thêm vào (số lượng là 2 yếu tố).
Cảm ơn, Jan
Đây là mã:
#!/usr/bin/perl -w
use threads;
use threads::shared;
use Mojolicious::Lite;
use Mojo::JSON;
my (%record, %job1, %job2, %job3, @jobs) : shared;
%job1 = (id=>"id1");
%job2 = (id=>"id2");
%job3 = (id=>"id3");
push (@jobs, \%job1);
push (@jobs, \%job2);
app->config(hypnotoad => {listen => ['http://*:3000']});
put '/job/create' => sub {
my $self = shift;
my $obj = Mojo::JSON->decode($self->req->body);
my $id = $obj->{id};
%record = (id => $id);
push (@jobs, \%record); # test the global prefilled
push (@jobs, \%job3); # test the global locally filled
$self->render(text => "Created job id $id. Jobs count: " .
$#jobs);
};
get '/job/status' => sub {
my $self = shift;
my $out = "[";
for(my $i=0; $i<$#jobs+1; $i++) {
$out .= "{id:\"" . $jobs[$i]{id} . "\",";
$out .= "," if $i<$#jobs;
}
$out .= "]";
$self->render(text => "allJobsInfo($out). Num jobs: " . $#jobs);
};
app->start();
Cảm ơn sự giúp đỡ. Cuối cùng, tôi chuyển sang một giải pháp với CouchDB. Trông khá đẹp btw. :) –
Thay thế 'perl your.app daemon -l 'http: // *: 3000'' cũng có thể hoạt động. [xem Máy chủ web tích hợp] (http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Built2Din_web_server) – klekker