我正在嘗試將一個應用程序從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) –