diff --git a/lib/fs.js b/lib/fs.js index 76f53db9ba7ec4..fef4f7ba501b50 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -1219,7 +1219,9 @@ function FSWatcher() { this._handle.onchange = function(status, event, filename) { if (status < 0) { self._handle.close(); - self.emit('error', errnoException(status, 'watch')); + const error = errnoException(status, `watch ${filename}`); + error.filename = filename; + self.emit('error', error); } else { self.emit('change', event, filename); } @@ -1234,7 +1236,9 @@ FSWatcher.prototype.start = function(filename, persistent, recursive) { recursive); if (err) { this._handle.close(); - throw errnoException(err, 'watch'); + const error = errnoException(err, `watch ${filename}`); + error.filename = filename; + throw error; } }; diff --git a/test/sequential/test-fs-watch.js b/test/sequential/test-fs-watch.js index 10f4baf591ae0b..385cf47686f2a8 100644 --- a/test/sequential/test-fs-watch.js +++ b/test/sequential/test-fs-watch.js @@ -126,3 +126,20 @@ assert.throws(function() { w.stop(); }, TypeError); oldhandle.stop(); // clean up + +assert.throws(function() { + fs.watch('non-existent-file'); +}, function(err) { + assert(err); + assert(/non-existent-file/.test(err)); + assert.equal(err.filename, 'non-existent-file'); + return true; +}); + +var watcher = fs.watch(__filename); +watcher.on('error', common.mustCall(function(err) { + assert(err); + assert(/non-existent-file/.test(err)); + assert.equal(err.filename, 'non-existent-file'); +})); +watcher._handle.onchange(-1, 'ENOENT', 'non-existent-file');