2017-06-28 15 views
1

reqが短すぎるとエラーメッセージを表示しようとしています。ここでは、コードは次のようになります。エラー:テンプレートインスタンスのインスタンス化エラー

import std.stdio; 
import vibe.d; 

Database mydatabase; 
void main() 
{ 
    // ... 
    router.get("*", &myStuff); // all other request 
    listenHTTP(settings, router); 

    runApplication(); 

} 

@errorDisplay!showPageNotFound 
void myStuff(HTTPServerRequest req, HTTPServerResponse res) // I need this to handle any accessed URLs 
{ 
    if(req.path.length > 10) 
    { 
    // ... 
    } 

    else 
    { 
     throw new Exception("Nothing do not found"); 
    } 
} 

void showPageNotFound(string _error = null) 
{ 
    render!("error.dt", _error); 
} 

エラーは次のとおりです。

source\app.d(80,2): Error: template instance app.showPageNotFound.render!("error.dt", _error).render!("app", "app.showPageNotFound") error instantiating

私がやっている場合:あなたが見れば Error: undefined identifier 'res'

答えて

1

void showPageNotFound(string _error = null) 
{ 
    res.render!("error.dt", _error); 
} 

を私はエラーを取得していますのエラーで1つは、render!が呼び出された親クラスのメソッドvibe.dtries to callinitが表示されますが、コードには親クラスがありません。

これは、現在、クラスの外にあるerrorDisplayによって呼び出される関数でテンプレートをレンダリングできないことを意味します。実際、&((new NewWebService).myStuffrouter.anyに渡すと、errorDisplayはまったく動作しません(バグ?)。 vibe.dリポジトリのすべての例は、errorDisplayのクラスを使用しています。


あなたはクラスの内部getStuffshowPageNotFoundをラップすることができますが、それは唯一の個々の機能のためだとしてrouter.any("*", ...は、可能性はなく、registerWebInterfaceで使用した場合@path属性は、ワイルドカードをサポートしていません。

これを解決するには、例外をスローするのではなく、myStuffの内部でエラーをレンダリングします。私はあなたがerrorDisplayを使用したいと思うように、貧しい人ではありますが。

使用される場合、より良い解決策は@pathに、より良いサポートワイルドカード(errorDisplayクラス外で使用することができない?やバグを修正)errorDisplayによって呼び出される関数にreqパラメータを渡すvibe.dで機能を実装する、またはされるであろうregisterWebInterfaceとなります。

関連する問題