1
似乎documentation未提供此信息。從節點靜態獲取serveFile函數時發生錯誤
使用serveFile
時如何檢查提供的文件是否存在?
fileServer.serveFile('/error.html', 500, {}, request, response);
換句話說,我該如何檢查文件是否成功發送?
似乎serveFile
function不接受回調函數。或者我錯了?
似乎documentation未提供此信息。從節點靜態獲取serveFile函數時發生錯誤
使用serveFile
時如何檢查提供的文件是否存在?
fileServer.serveFile('/error.html', 500, {}, request, response);
換句話說,我該如何檢查文件是否成功發送?
似乎serveFile
function不接受回調函數。或者我錯了?
看樣子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!
});
而對於錯誤我想,'promise.on( 「錯誤」,函數(ERR){} )'會工作。我對嗎? –
@Johnツ - 確實。 –