我正在尝试将一个应用程序从Dancer迁移到Dancer2。我的想法是将代码分离为使用模板和Ajax(API)调用的路由。如何在不同的串行器之间共享Dancer2应用程序之间的会话数据?
我的基本程序是:
use strict;
use warnings;
use FindBin;
use Plack::Builder;
use Routes::Templates;
use Routes::Login;
builder {
mount '/' => Routes::Templates->to_app;
mount '/api' => Routes::Login->to_app;
};
我在想,在Routes::Templates
包不会有任何串行和Routes::Login
包将有JSON序列化。我用
set serializer => 'JSON';
在Routes::Login
包。
不过,我也希望这些共享会话数据,使每个人都有每个文件中常见的应用程序的名字
use Dancer2 appname => 'myapp';
。这似乎与串行化遇到麻烦。 Routes::Template
路由未正确返回,因为它试图将其编码为JSON。这里的错误:
Failed to serialize content: hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)
我读过的所有文件,其中包括:
- How can I use Dancer2::Plugin::Database when my code is split into multiple files?
- https://github.com/wyoung/advent-calendar/tree/master/danceradvent/public/articles/2015
但我仍然没有就如何串行明确被包分开。
[Dancer2 :: Plugin :: SendAs](https://metacpan.org/pod/Dancer2::Plugin::SendAs)允许您覆盖默认的全有或全无序列化器行为,但这里没有必要,并且我认为当你坚持一个应用程序中所有路由的序列化程序时,事情会变得更加清晰。 – ThisSuitIsBlackNot
我得到这个在测试用例中工作,并将其应用于我的。我想补充一点,为了使测试脚本得到这个工作,你需要确保你保存了cookies并重新发送,如[使用cookies测试Dancer doc]所示(https://metacpan.org/pod /distribution/Dancer2/lib/Dancer2/Manual/Testing.pod#Cookies) –