Hi All
I am working on implementing a REST api using dancer to be called
from a website using ExtJs to get and send data as JSON.
As the dancer app will be on a different port (and possibly on a
different machine) I am trying to setup CORS.
My initial attempt involved setting up shares in my Controller for
each resource and method like this :-
package Controller::API;
use Dancer qw/ :syntax /;
use Dancer::Plugin::CORS;
.....
foreach my $resource (@resources) {
get "/$resource" => sub {
........
};
get "/$resource/*" => sub {
........
};
# repeat for each method
........
share "/$resource" =>
origin => [ 'http://somewhere:port', ........ ],
methods => [ qw/GET PUT POST DELETE OPTIONS/],
credentials => 1;
share
"/$resource/*" =>
origin => [ 'http://somewhere:port', ........ ],
methods => [ qw/GET PUT POST DELETE OPTIONS/],
credentials => 1;
}
Which worked fine for get but when the extjs
app tried a post or put to the api, it send OPTIONS first and I
can't work out how to respond appropriately from the api to get
it to send a post or put.
Then I tried to setup CORS via Plack middleware but can't get
that to work either.
here is what I tried :-
in environments/development.yml
pack_middlewares:
CrossOrigin:
Doing this I see 'add middleware CrossOrigin' in the logs but
CORS doesn't work (even on Get).
Then I tried in my Controller:-
set plack_middlewares => [
[ CrossOrigin => [ origins => '*', methods =>
['GET', 'POST', 'PUT', 'OPTIONS','DELETE']]]
];
Still no joy.
Anyone got any ideas ?
Cheers
Tony
BTW: I would have prefered to use Dancer2 but it appears that
there is no CORS plugin for Dancer2