2016-11-19 8 views
-1

Ich versuche, eine Funktion zu schreiben, die den Inhalt eines Verzeichnisses durchläuft und alle xml-Dateien innerhalb des Verzeichnisses zurückgibt. Bisher bin ich in der Lage, alle Dateien im Verzeichnis zurückzukehren (console.log(files) druckt einen Array von Strings mit den Dateinamen, aber wenn ich versuche, mit der path.extname Funktion zum Filtern Ich erhalte:Unbehandelte Ablehnung TypeError: path.extname ist keine Funktion

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)

Dies ist meine Code:.

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'); 

Antwort

1

Du path für zwei verschiedene Dinge verwendet wird, und sie miteinander sind stören Sie haben ein Modul global:

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

... aber dann Sie Schatten, dass mit einem Argument: Also innerhalb getFileNames, bezieht sich der path Kennung auf dieses Argument

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

, nicht die global, und da sie sich nicht auf dem path Modul (aus dem Kontext, ich denke, das path Argument ist eine Zeichenfolge), Sie haben keine path.extname.

Verwenden Sie andere Namen.

Verwandte Themen