Маршрут к статическому файлу в Mojo

У меня есть небольшое приложение на основе mojolicious. И у меня есть index.html в публичном каталоге. Я хочу иметь маршрут к этому файлу, когда пользователь запрашивает «/».

Я написал два решения, но они мне не нравятся.

Первое решение - добавить простой контроллер.

sub stratup {
  //...
  $r->get('/')->to('general#index_html');
  //...
}

package MyPackage::General;

use Mojo::Base 'Mojolicious::Controller';

use strict;
use warnings;

sub index_html {
    my $self = shift;
    $self->render_static('index.html');
    return;
}

1;

Второе решение - добавить хук

sub startup {
    my $self = shift;

    $self->hook(before_dispatch => sub {
            my $self = shift;
            if ($self->req->url eq '/') {
                $self->req->url( Mojo::URL->new('/index.html') );
            }
        });

Что я хочу:

$r->get('/')->to('/index.html');

или что-то вроде того.

P.S. Я знаю, что обычно это делают nginx/apache, но я использую morbo для запуска кода.


person KoVadim    schedule 05.03.2015    source источник


Ответы (2)


Ты хочешь:

$r->get('...')->to(cb => sub {  
     my $c = shift;                                   
     $c->reply->static('index.html')                
}); 

(Пока вы после Mojolicous 5.45 2014-09-26)

person Nyanstep    schedule 28.02.2016

На сегодняшний день самый простой способ

get "/" => "index";

person John Slavick    schedule 05.03.2015
comment
это похоже на Mojo::Lite. Я переписываю его как $r->get('/')->to('index');, но он не работает. - person KoVadim; 05.03.2015
comment
Вы пробовали второй подход? Первый работает, только если index.html находится в вашем каталоге шаблонов. - person John Slavick; 05.03.2015
comment
Второе решение слишком велико. Это работает, но мое решение с хуком меньше. - person KoVadim; 05.03.2015
comment
Во втором подходе также есть очень серьезная уязвимость безопасности, потому что вы не защищаете от обхода пути. Имя файла, такое как (например) ../../../../../../../../../../etc/passwd, будет обслуживать то, что вы не хотите обслуживать, не из-за какого-либо дефекта в Mojolicious, а потому, что ОС сделает то, что вы просили. - person Michael - sqlbot; 16.04.2015
comment
@Michael-sqlbot Спасибо, что указали на это! Я удалил оскорбительный код, чтобы никто не использовал его, не зная о последствиях. - person John Slavick; 16.04.2015
comment
$r-›get('/' =› { template =› 'index' }); - person 3ED; 23.03.2021