1

ドキュメントにはこの情報が記載されていないようです。

使用serveFileする場合、提供されたファイルが存在するかどうかを確認するにはどうすればよいですか?

fileServer.serveFile('/error.html', 500, {}, request, response);

つまり、ファイルが正常に配信されたかどうかを確認するにはどうすればよいですか?

そのserveFile関数はコールバック関数を受け入れないようです。それとも私が間違っていますか?

4

1 に答える 1

2

serveFileが「プロミス」を返すように見えるので(プロミスではありませんが、のインスタンスですEventEmitter)、そのイベントをリッスンできますerror(ファイルが存在しない場合に発生します)。

Server.prototype.serveFile = function (pathname, status, headers, req, res) {
    var that = this;
    var promise = new(events.EventEmitter);

    pathname = this.resolve(pathname);

    fs.stat(pathname, function (e, stat) {
        if (e) {
            return promise.emit('error', e);
        }
        that.respond(null, status, headers, [pathname], stat, req, res, function (status, headers) {
            that.finish(status, headers, req, res, promise);
        });
    });
    return promise;
};

ファイル正常に処理されると、finishメソッドが呼び出され、同じ「promise」オブジェクトが渡されます。イベントを発行しsuccessます:

Server.prototype.finish = function (status, headers, req, res, promise, callback) {
    // ...

    if (!status || status >= 400) {
        // ...
    } else {
        // ...
        promise.emit('success', result);
    }
};

したがって、次のようなことができます。

var promise = fileServer.serveFile('/error.html', 500, {}, request, response);
promise.on("success", function () {
    // It worked!
});
于 2013-10-02T10:58:53.137 に答える