2016-11-19 3 views
-1

Я пытаюсь написать функцию, которая проходит через содержимое каталога и возвращает все xml-файлы внутри каталога. До сих пор я в состоянии вернуть все файлы в каталоге (console.log(files) выводит на массив строк с именами файлов, но когда я пытаюсь фильтровать с помощью функции path.extname Я получаю:Unhandled rejecting TypeError: path.extname не является функцией

usr/local/Cellar/node/6.8.0/bin/node /Users/shooshte/Sportradar/notThatKindOfPeon/bluebird.js Unhandled rejection TypeError: path.extname is not a function at /Users/shooshte/Sportradar/notThatKindOfPeon/bluebird.js:23:31 at Array.filter (native) at /Users/shooshte/Sportradar/notThatKindOfPeon/bluebird.js:22:30 at tryCatcher (/Users/shooshte/Sportradar/notThatKindOfPeon/node_modules/bluebird/js/release/util.js:16:23) at Promise._settlePromiseFromHandler (/Users/shooshte/Sportradar/notThatKindOfPeon/node_modules/bluebird/js/release/promise.js:510:31) at Promise._settlePromise (/Users/shooshte/Sportradar/notThatKindOfPeon/node_modules/bluebird/js/release/promise.js:567:18) at Promise._settlePromise0 (/Users/shooshte/Sportradar/notThatKindOfPeon/node_modules/bluebird/js/release/promise.js:612:10) at Promise._settlePromises (/Users/shooshte/Sportradar/notThatKindOfPeon/node_modules/bluebird/js/release/promise.js:691:18) at Promise._fulfill (/Users/shooshte/Sportradar/notThatKindOfPeon/node_modules/bluebird/js/release/promise.js:636:18) at /Users/shooshte/Sportradar/notThatKindOfPeon/node_modules/bluebird/js/release/nodeback.js:42:21 at FSReqWrap.oncomplete (fs.js:123:15)

Это мое код:.

const Promise = require('bluebird'); 
const fs = Promise.promisifyAll(require('fs')); 
const path = require('path'); 

function getFileNames(path) { 
    // Read content of path 
    return fs.readdirAsync(path) 
     // For every file in path 
     .then(function(content) { 
     // Filter out the directories 
     return content.filter(function(file) { 
      return fs.statSync(path + '/' + file).isDirectory(); 
     }); 
     }) 
     // For every directory 
     .then(function(directories) { 
     directories.map(function(directory) { 
      // Read file in the directory 
      fs.readdirAsync(path + '/' + directory + '/') 
       .then(function(files) { 
       // Filter out the XMLS 
       return files.filter(function(file) { 
        return path.extname(file) == '.XML'; 
       }); 
       console.log(files); 
       }); 
      }); 
     }); 
     } 

getFileNames('./XML'); 

ответ

1

Вы используете path для двух разных вещей, и они мешают друг другу у вас есть модуль глобального:

const path = require('path'); 
// ---^ 

... но тогда вы тень, что с аргументом:

function getFileNames(path) { 
// -------------------^ 

Так в getFileNames, то path идентификатор относится к этому аргументу, а не ваш глобальный характер, и так как он не относится к path модуля (из контекста, я предполагаю, что аргумент path является строкой), у вас нет path.extname.

Использовать разные названия.

Смежные вопросы