从节点静态捕获服务文件函数上的错误



似乎文档没有提供此信息。

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

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

换句话说,如何检查文件是否已成功提供?

似乎serveFile函数不接受回调函数。还是我错了?

看起来serveFile返回了一个"promise"(虽然它不是 promise,但它是 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!
});

最新更新