Здравствуйте!
Имеется вот такое автономное приложение на Dancer2:

app.pl

#!/usr/bin/env perl
use Dancer2;

use Data::Section::Simple qw/get_data_section/;
use DBI;
use utf8;

my $index = get_data_section('index.html');

# Settings
#---------------------
set charset    => "UTF-8";
set serializer => 'JSON';
#---------------------

get '/' => sub { 'hello' };

any ['get', 'post'] => '/login' => sub {
  if (request->method() eq 'POST') {
    my $username = param 'username';
    my $password = param 'password';

    my $dbfile = 'mydb.db';
my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","") or die $DBI::errstr;

my $statement = qq{SELECT id FROM users WHERE username=? and password=?};

    my $sth = $dbh->prepare($statement) or die $dbh->errstr;
    my $rv = $sth->execute($username, $password) or die $sth->errstr;

    my ($userID) = $sth->fetchrow_array;

    if ($userID) {
      redirect '/';
    } else {
      if (request->is_ajax) {
        response->content_type('application/json');
        return {error => 'username or password is wrong'};
      }
    }
  }

  return $index;
};


dance;

__DATA__
@@ index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
<title>Very simple login using Perl, Lovely.IO, Ajax, JSON and SQLite</title> <link rel="stylesheet" type="text/css" media="screen, projection" href="http://www.blueprintcss.org/blueprint/screen.css"; /> <link rel="stylesheet" type="text/css" media="screen, projection" href="http://www.blueprintcss.org/blueprint/plugins/buttons/screen.css"; /> <link rel="stylesheet" type="text/css" media="print" href="http://www.blueprintcss.org/blueprint/print.css"; />

<!--[if IE]><link rel="stylesheet" type="text/css" media="screen, projection" href="http://www.blueprintcss.org/blueprint/ie.css";><![endif]--> <script type="text/javascript" src="http://code.jquery.com/jquery-2.0.3.min.js";></script>

    <script type="text/javascript">
      $(document).ready(function(){
        $("#loginForm").submit(function() { // loginForm отправлена

$.post('/login', { "username": $('#username').val(), "password": $('#password').val() }, function(data, textStatus, jqXHR){
            if (data.error) { // сценарий возвратил ошибку
$('#loginResult').text("data.error: " + data.error).addClass("error");
            }
          });

          $('#loginResult').fadeIn();
          return false;
        });
      });
    </script>

    <style type="text/css">
      #loginContent { width: 350px; margin: 100px auto; }
      button[type] { margin: 0.5em 0; }
      dd {margin: 0; padding: 0; }
    </style>
  </head>
  <body>
    <div id="loginContent" class="container">
      <div id="loginResult" style="display:none;"></div>
      <form id="loginForm" name="loginForm" method="post" action="/login">
        <fieldset>
          <legend>Enter information</legend>

          <dl>
            <dt><label for="username">Username</label></dt>
<dd><input type="text" id="username" name="username" class="text" size="20" /></dd>
            <dt><label for="password">Password</label></dt>
<dd><input type="password" id="password" name="password" class="text" size="20" /></dd>
          </dl>

<button type="submit" class="button positive"><img alt="ok" src="http://www.blueprintcss.org/blueprint/plugins/buttons/icons/tick.png"; /> Login</button>
        </fieldset>
      </form>
    </div>
  </body>
</html>

Запускаю с помощью
$ plackup app.pl

Подскажите пожайлуста, как сделать редирект на роут '/', чтобы на выходе появилось 'hello':
get '/' => sub { 'hello' };

Сейчас никакого редиректа не происходит, хотя в лог пишется, что он прошел:

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" 127.0.0.1 - - [18/Dec/2013:14:01:49 +0200] "POST /login HTTP/1.1" 302 0 "http://localhost:5000/login"; "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16" 127.0.0.1 - - [18/Dec/2013:14:01:49 +0200] "GET / HTTP/1.1" 200 5 "http://localhost:5000/login"; "Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16"

Подскажите, в чем может быть проблема?
_______________________________________________
Kiev-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/kiev-pm

Ответить