gpt4 book ai didi

perl - 带有 Dancer perl 的多个应用程序目录

转载 作者:行者123 更新时间:2023-12-04 17:56:47 24 4
gpt4 key购买 nike

有没有办法在舞者中有一个应用程序但有多个应用程序目录。

或者我可以做这样的事情:

我的项目在目录'foo'中。假设我有一个目录'bar'(不在'foo'内),它有一个名为'public'的目录。我的应用程序“foo”将此公众用作自己的公众,如果它搜索让我们说“/css/style.css”并且它不在“/bar/public/”中,它应该搜索“/foo/”上市/'。我怎样才能做到这一点?

最佳答案

好的,这是一个很好的方法。它当然可以是一个插件。

你不应该通过入侵 Dancer 的核心来做这种事情,你应该总是考虑实现一个路由处理程序来完成这项工作:

#!/usr/bin/env perl
use Dancer;
use File::Spec;
use Dancer::FileUtils 'read_file_content';
use Dancer::MIME;
use HTTP::Date;

# your routes here

# then the catchall route for
# serving static files

# better in config
my @public_dirs = qw(/tmp/test/foo /tmp/test/bar /tmp/test/baz);

get '/**' => sub {
my $path = request->path;
my $mime = Dancer::MIME->instance;

# security checks
return send_error("unauthrorized request", 403) if $path =~ /\0/;
return send_error("unauthrorized request", 403) if $path =~ /\.\./;

# decompose the path_info into a file path
my @path = split '/', $path;

for my $location (@public_dirs) {
my $file_path = File::Spec->catfile($location, @path);

next if ! -f $file_path;

my $content = read_file_content($file_path);
my $content_type = $mime->for_file($file_path);
my @stat = stat $file_path;

header 'Content-Type', $content_type;
header 'Content-Length', $stat[7];
header 'Last-Modified', HTTP::Date::time2str($stat[9]);
return $content;
}

pass;
};

start;

此应用程序运行的示例:
$ mkdir -p /tmp/test/foo /tmp/test/bar /tmp/test/baz
$ echo 1 > /tmp/test/foo/foo.txt
$ echo 2 > /tmp/test/bar/bar.txt
$ echo 3 > /tmp/test/baz/baz.txt
$ ./bin/app.pl
$ curl -I http://0:3000/baz.txt
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/plain
Last-Modified: Fri, 14 Oct 2011 11:28:03 GMT
X-Powered-By: Perl Dancer 1.3051

关于perl - 带有 Dancer perl 的多个应用程序目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7334060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com