Node.js:当使用path.basename时,Directory没有方法'basename'

时间:2013-12-19 19:28:12

标签: javascript node.js

我有一个文件数组,我正在尝试获取文件的basename,而没有他们的长扩展名。以下是数组的示例:

[ 
  '/public/uploads/contentitems/.DS_Store',
  '/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0.png',
  '/public/uploads/contentitems/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1.png',
  '/public/uploads/contentitems/2A431412-A776-4D11-841A-B640DF37C9E2/2A431412-A776-4D11-841A-B640DF37C9E2_2.png' 
]

我想得到:

[ 
  '.DS_Store',
  '063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0.png',
  '063012A5-60BC-4A4C-AEC2-56B0D5D99EF0/063012A5-60BC-4A4C-AEC2-56B0D5D99EF0_1.png',
  '2A431412-A776-4D11-841A-B640DF37C9E2/2A431412-A776-4D11-841A-B640DF37C9E2_2.png' 
]

根据文档,path.basename函数应该返回没有路径的文件。

但我得到的是以下错误:

TypeError: Object /public/uploads/contentitems has no method 'basename'

以下是我现在使用的代码:

    var walk = function(dir, done) {
        var results = [];
        fs.readdir(dir, function(err, list) {
            if (err) return done(err);
            var pending = list.length;
            if (!pending) return done(null, results);
            list.forEach(function(file) {
                file = dir + '/' + file;
                fs.stat(file, function(err, stat) {
                    if (stat && stat.isDirectory()) {
                        walk(file, function(err, res) {
                            results = results.concat(res);
                            if (!--pending) done(null, results);
                        });
                    } else {
                        var suffix = getSuffix(file);
                        if (!verObj[suffix]) results.push(file);
                        if (!--pending) done(null, results);
                    }
                });
            });
        });
    };

    walk(path, function(err, results) {
        if (err) throw err;
        results.forEach(function(file) {
            console.log(path.basename(file));
        });
        self.respond({files: results}, {format: 'json'});
    });

我也在文件的顶部使用path = require('path');

1 个答案:

答案 0 :(得分:6)

您的变量名称与path冲突。

使用path以外的其他内容来表示您想要走的目录。

walk(path, function(err, results) {

您正在将名为path的字符串传递给walk()

console.log(path.basename(file));  // <-- path is a string here