1

非同期node.jsを使用してHaxeで例外を処理するためのベストプラクティスは何ですか?

このコードは「haha: test」ではなく、「test」と表示します。

import js.Node;

class Main {

    public static function handleRequest(req: NodeHttpServerReq, res: NodeHttpServerResp) {
        res.setHeader("Content-Type","text/plain");
        res.writeHead(200);
        res.end('Hello World\n');
        throw "test";
    }

    public static function main() {
        try {
            var server = Node.http.createServer(handleRequest);
            server.listen(1337,"localhost");
        } catch(e: String) {
            trace("haha: " + e);
        }

        trace( 'Server running at http://127.0.0.1:1337/' );
    }
}

例外がキャッチされない理由はわかっています。問題は、Haxe で例外を処理するためのベスト プラクティスは何かということです。

4

3 に答える 3

1

Node.js 例外を戻り値として処理するhaxe-continuationを試すことをお勧めします。この例を参照してください。

于 2013-02-16T14:52:40.647 に答える
0

ステートメントは、およびメソッド呼び出しtry / catchによってスローされたエラーのみをキャッチし、リクエストハンドラーのロジックはキャッチしません。これについて100%確信はありませんが、呼び出しの非同期性は、メソッドでスローされたエラーがそこでもキャッチされないことを意味していると思います。次の手順を実行すると、期待する結果が得られます。createServerserver.listenhandleRequest

import js.Node;

class Main {

    public static function handleRequest(req: NodeHttpServerReq, res: NodeHttpServerResp) {
        res.setHeader("Content-Type","text/plain");
        res.writeHead(200);
        res.end('Hello World\n');
        //throw "test";
    }

    public static function main() {
        try {
            var server = Node.http.createServer(handleRequest);
            server.listen(1337,"localhost");
            throw "test"; // Throwing the error here will result in it being caught below
        } catch(e: String) {
            trace("haha: " + e);
        }

        trace( 'Server running at http://127.0.0.1:1337/' );
    }
}

エラー処理のベストプラクティスとして、haxennodeの基本的な例にはエラー処理が含まれておらず、成功コールバックにインライン匿名関数を使用しています(Haxe哲学と完全に互換性があるとは限りません)。それ以外の場合、ノードの例を含むHaxeは、地上ではかなり薄いように見えます。ただし、ノードでのhttpエラーの処理に関するこのstackoverflowスレッド(通常)はおそらく便利です。メソッドによってエラーがスローされることに注意してくださいserver.listen

于 2012-10-17T23:36:38.860 に答える
0

try/catch を完全に避けて、より NodeJS 指向の戦略を支持するべきだと思います。のイベントでリッスンすることで、エラーを実行および傍受handleRequestできるはずです。req.abort()clientErrorserver

免責事項: 私は NodeJS を使用していないため、詳細が間違っている可能性がありますが、一般的な概念は正しいはずです ;)

于 2012-10-18T14:59:05.697 に答える