Я использую наблюдатель chokidar для просмотра каталога. Мне нужен путь в обратном вызове fs.readFile. Если я напишу код следующим образом:
watcher.on('add', path => {
var log = console.info.bind(console);
log(`File ${path} has been added`);
fs.readFile(path,'utf-8', function(err, data,path) {
log(`File ${path} has been read`);
......
......
Вот результат:
File test1.txt has been added
File undefined has been read
Как я могу получить значение пути в обратном вызове fs.readfile
fs.readFile(path,'utf-8', callback..
, здесь обратный вызов содержит только два аргумента, 1-error , 2-data
. Значения ошибок и данных передаются в соответствующие аргументы. (Обратите внимание, первый всегда на ошибку, а другой на данные).
Вы добавляете третий аргумент к этому обратному вызову, который никогда не будет содержать никакого значения, поэтому вы видите этот undefined
, потому что модуль fs
никогда не заполняет никаких других аргументов, кроме error
и data
. Итак, сначала удалите это из аргументов обратного вызова, и ваш обратный вызов должен выглядеть как
fs.readFile(path,'utf-8', function(err, data) {..
Теперь вы должны увидеть имя файла, напечатанное в консоли.
Кроме того, вы всегда можете использовать модуль path
от nodejs
и
path.basename('pathToFile')
вернет имя файла по пути, который вы укажете в качестве аргумента
Отбросьте параметр
path
из обратного вызоваfs.readFile()
, и все будет в порядке.