如何防止Perl舞者应用程序中的一个路由中的序列化?

时间:2018-03-23 10:19:22

标签: perl dancer

我有一个perl舞者应用程序(提供休息api),可以正常使用JSON(de-)序列化。 现在我需要一个额外的特殊路由,它提供了一个(动态创建的)csv文件供下载。

以下是示例代码:

#!/usr/bin/env perl
use Dancer2;
set serializer => 'JSON';

get '/normal' => sub {
    { 'I say ' => 'the json serializer works' };
};

get '/download' => sub {
    content_type 'text/csv';
    return  generateCsv();
};

sub generateCsv {
    return '
    1,2,3
    4,5,6
    ';
}

dance;

发送给客户端的响应没有正文,只有一个http-header(具有正确的内容类型)

$> curl  -I  http://localhost:3000/download
HTTP/1.0 200 OK
Date: Fri, 23 Mar 2018 10:10:14 GMT
Server: Perl Dancer2 0.205002
Server: Perl Dancer2 0.205002
Content-Length: 0
Content-Type: text/csv

舞者序列化师对此并不满意:

Failed to serialize content: hash- or arrayref expected 
(not a simple scalar, use allow_nonref to allow this) 
at /usr/local/share/perl/5.22.1/Dancer2/Serializer/JSON.pm line 40. 
in /usr/local/share/perl/5.22.1/Dancer2/Core/Response.pm 

我无法在Dancer文档或源代码中找到有关allow_nonref内容的任何内容。

有人暗示我吗?

2 个答案:

答案 0 :(得分:4)

使用send_as

get '/download' => sub {
    send_as Mutable => generateCsv();
};

答案 1 :(得分:3)

我发现send_file也有效:

get '/download' => sub {
        send_file (\&generateCsv(), content_type => 'text/csv', filename => 'articleEbayStatus.csv');
};