<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>