簡體   English   中英

從節點靜態捕獲serveFile函數上的錯誤

[英]Catch error on serveFile function from node-static

似乎該文檔未提供此信息。

使用serveFile如何檢查提供的文件是否存在?

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

換句話說,如何檢查文件是否成功送達?

似乎serveFile函數不接受回調函數。 還是我錯了?

似乎serveFile返回一個“ promise”(盡管這不是一個EventEmitter ,它是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方法被調用,同樣的“承諾”對象將傳入。 它將發出一個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!
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM