从node-static捕获serveFile函数上的错误
似乎该文档不提供此信息。
在使用serveFile
如何检查服务文件是否存在?
fileServer.serveFile('/error.html', 500, {}, request, response);
换句话说,我怎样才能检查文件是否成功传递?
似乎serveFile
函数不接受callback函数。 还是我错了?
它看起来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
方法,并将相同的“承诺”对象传递给它。 它会发出一个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! });