<div dir="ltr">Hello,<br><div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/12/18 TheAthlete <span dir="ltr"><<a href="mailto:theathlet@yandex.ru" target="_blank">theathlet@yandex.ru</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Здравствуйте!<br>
Имеется вот такое автономное приложение на Dancer2:<br>
<br>
<a href="http://app.pl" target="_blank">app.pl</a><br>
<br>
#!/usr/bin/env perl<br>
use Dancer2;<br>
<br>
use Data::Section::Simple qw/get_data_section/;<br>
use DBI;<br>
use utf8;<br>
<br>
my $index = get_data_section('index.html')<u></u>;<br>
<br>
# Settings<br>
#---------------------<br>
set charset => "UTF-8";<br>
set serializer => 'JSON';<br>
#---------------------<br>
<br>
get '/' => sub { 'hello' };<br>
<br>
any ['get', 'post'] => '/login' => sub {<br>
if (request->method() eq 'POST') {<br>
my $username = param 'username';<br>
my $password = param 'password';<br>
<br>
my $dbfile = 'mydb.db';<br>
my $dbh = DBI->connect("dbi:SQLite:<u></u>dbname=$dbfile","","") or die $DBI::errstr;<br>
<br>
my $statement = qq{SELECT id FROM users WHERE username=? and password=?};<br>
<br>
my $sth = $dbh->prepare($statement) or die $dbh->errstr;<br>
my $rv = $sth->execute($username, $password) or die $sth->errstr;<br>
<br>
my ($userID) = $sth->fetchrow_array;<br>
<br>
if ($userID) {<br>
redirect '/';<br>
} else {<br>
if (request->is_ajax) {<br>
response->content_type('<u></u>application/json');<br>
return {error => 'username or password is wrong'};<br>
}<br>
}<br>
}<br>
<br>
return $index;<br>
};<br>
<br>
<br>
dance;<br>
<br>
__DATA__<br>
@@ index.html<br>
<!DOCTYPE html><br>
<html><br>
<head><br>
<meta charset="utf-8" /><br>
<title>Very simple login using Perl, Lovely.IO, Ajax, JSON and SQLite</title><br>
<link rel="stylesheet" type="text/css" media="screen, projection" href="<a href="http://www.blueprintcss.org/blueprint/screen.css" target="_blank">http://www.blueprintcss.<u></u>org/blueprint/screen.css</a>" /><br>
<link rel="stylesheet" type="text/css" media="screen, projection" href="<a href="http://www.blueprintcss.org/blueprint/plugins/buttons/screen.css" target="_blank">http://www.blueprintcss.<u></u>org/blueprint/plugins/buttons/<u></u>screen.css</a>" /><br>
<link rel="stylesheet" type="text/css" media="print" href="<a href="http://www.blueprintcss.org/blueprint/print.css" target="_blank">http://www.blueprintcss.<u></u>org/blueprint/print.css</a>" /><br>
<br>
<!--[if IE]><link rel="stylesheet" type="text/css" media="screen, projection" href="<a href="http://www.blueprintcss.org/blueprint/ie.css" target="_blank">http://www.blueprintcss.<u></u>org/blueprint/ie.css</a>"><![<u></u>endif]--><br>
<script type="text/javascript" src="<a href="http://code.jquery.com/jquery-2.0.3.min.js" target="_blank">http://code.jquery.com/<u></u>jquery-2.0.3.min.js</a>"></script><br>
<br>
<script type="text/javascript"><br>
$(document).ready(function(){<br>
$("#loginForm").submit(<u></u>function() { // loginForm отправлена<br>
<br>
$.post('/login', { "username": $('#username').val(), "password": $('#password').val() }, function(data, textStatus, jqXHR){<br>
if (data.error) { // сценарий возвратил ошибку<br>
$('#loginResult').text("data.<u></u>error: " + data.error).addClass("error");<br>
}<br>
});<br>
<br>
$('#loginResult').fadeIn();<br>
return false;<br>
});<br>
});<br>
</script><br>
<br>
<style type="text/css"><br>
#loginContent { width: 350px; margin: 100px auto; }<br>
button[type] { margin: 0.5em 0; }<br>
dd {margin: 0; padding: 0; }<br>
</style><br>
</head><br>
<body><br>
<div id="loginContent" class="container"><br>
<div id="loginResult" style="display:none;"></div><br>
<form id="loginForm" name="loginForm" method="post" action="/login"><br>
<fieldset><br>
<legend>Enter information</legend><br>
<br>
<dl><br>
<dt><label for="username">Username</<u></u>label></dt><br>
<dd><input type="text" id="username" name="username" class="text" size="20" /></dd><br>
<dt><label for="password">Password</<u></u>label></dt><br>
<dd><input type="password" id="password" name="password" class="text" size="20" /></dd><br>
</dl><br>
<br>
<button type="submit" class="button positive"><img alt="ok" src="<a href="http://www.blueprintcss.org/blueprint/plugins/buttons/icons/tick.png" target="_blank">http://www.blueprintcss.<u></u>org/blueprint/plugins/buttons/<u></u>icons/tick.png</a>" /> Login</button><br>
</fieldset><br>
</form><br>
</div><br>
</body><br>
</html><br>
<br>
Запускаю с помощью<br>
$ plackup <a href="http://app.pl" target="_blank">app.pl</a><br>
<br>
Подскажите пожайлуста, как сделать редирект на роут '/', чтобы на выходе появилось 'hello':<br>
get '/' => sub { 'hello' };<br>
<br>
Сейчас никакого редиректа не происходит, хотя в лог пишется, что он прошел:<br></blockquote><div><br></div><div>Не совсем понятно как проверяешь. По логам - да есть редирект.<br></div><div>Покажи <br>wget -O - <a href="http://localhost:3000/">http://localhost:3000/</a><br>
</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
127.0.0.1 - - [18/Dec/2013:14:01:41 +0200] "GET /login HTTP/1.1" 200 4694 "-" "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16"<br>
127.0.0.1 - - [18/Dec/2013:14:01:49 +0200] "POST /login HTTP/1.1" 302 0 "<a href="http://localhost:5000/login" target="_blank">http://localhost:5000/login</a>" "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16"<br>
127.0.0.1 - - [18/Dec/2013:14:01:49 +0200] "GET / HTTP/1.1" 200 5 "<a href="http://localhost:5000/login" target="_blank">http://localhost:5000/login</a>" "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16"<br>
<br>
Подскажите, в чем может быть проблема?<br></blockquote></div><br></div><div class="gmail_extra">Посмотри (кажется твой случай)<br><a href="https://en.wikipedia.org/wiki/Post/Redirect/Get">https://en.wikipedia.org/wiki/Post/Redirect/Get</a><br>
</div><div class="gmail_extra"></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br>-- <br>Sergiy Borodych
</div></div></div>