2016-01-16 140 views
0

我正在嘗試通過執行learnyounode課程來學習Node.js基礎知識。 我被困在了Make it Modular章節。模塊和Node.js

我不知道我是否被允許在這裏粘貼它的內容,但粗略地說,我被要求創建一個模塊來過濾指定擴展名後目錄中的文件名。

以下是我迄今所做的:

var module = require('module'); 

module(process.argv[2], process.argv[3], function (err, data){ 
    if(err){ 
    console.log("Error"); 
    } 
    else{ 
    console.log(data); 
    } 
}); 

module.js:

var fs = require('fs'); 
var path = require('path'); 

module.exports = function (dir, ext, callback){ 
    fs.readdir(dir, function (err, files){ 
    if(err){ 
     callback(err); 
    } 
    else { 
     var array = ''; 
     for(var i=0; i<files.length; i++){ 
     if(path.extname(files[i]) === '.'+ext){ 
     array+=files[i]+"\n"; 
     } 
     } 
     callback(null, array); 
    } 
    }); 
} 

我得到以下錯誤:

module.js:27 
    this.id = id; 
     ^

TypeError: Cannot set property 'id' of undefined 
    at Module (module.js:27:11) 
    at Object.<anonymous> (/home/maxence/Documents/Node.js/learnyounode/MIM/mim.js:3:1) 
    at Module._compile (module.js:397:26) 
    at Object.Module._extensions..js (module.js:404:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Module.require (module.js:353:17) 
    at require (internal/module.js:12:17) 
    at Object.<anonymous> (/usr/local/lib/node_modules/learnyounode/node_modules/workshopper-wrappedexec/exec-wrap.js:87:3) 
    at Module._compile (module.js:397:26) 

我的猜測是我」我沒有正確地在我的代碼中的某個地方聲明瞭一個變量,但我無法找到它。模塊的調用是否正確?

最好的問候, MM

編輯:作爲gnerkus說,應該有,而不是'模塊 './module'。這裏是工作代碼:

var module = require('./module'); 

module(process.argv[2], process.argv[3], function (err, data){ 
    if(err){ 
    console.log("Error"); 
    } 
    else{ 
    console.log(data); 
    } 
}); 

module.js:

var fs = require('fs'); 
var path = require('path'); 

module.exports = function (dir, ext, callback){ 
    fs.readdir(dir, function (err, files){ 
    if(err){ 
     callback(err); 
    } 
    else { 
     var array = ''; 
     for(var i=0; i<files.length; i++){ 
     if(path.extname(files[i]) === '.'+ext){ 
     array+=files[i]+"\n"; 
     } 
     } 
     callback(null, array); 
    } 
    }); 
} 

編輯2:看來,這個版本是首選:

var module = require('./module'); 

module(process.argv[2], process.argv[3], function (err, data){ 
    if(err){ 
    console.log("Error"); 
    } 
    else{ 
    for(var i=0; i<data.length; i++){ 
     console.log(data[i]); 
    } 
    } 
}); 

module.js:

var fs = require('fs'); 
var path = require('path'); 

module.exports = function (dir, ext, callback){ 
    fs.readdir(dir, function (err, files){ 
    if(err){ 
     callback(err); 
    } 
    else { 
     var array = []; 
     for(var i=0; i<files.length; i++){ 
     if(path.extname(files[i]) === ('.'+ext)){ 
     array.push(files[i]); 
     } 
     } 
     callback(null, array); 
    } 
    }); 
} 

兩者都是正確的,但第二個ve需要rsion才能完成本章。

+2

的錯誤是在module.js 27行但你只顯示多達18行。如果這是你的整個文件,你缺少右括號,否則,至少應該在錯誤周圍發佈幾行。 – noahnu

+0

你說得對,右括號確實缺失。 Ans as gnerkus說,'module'應該是主文件中的'./module'。謝謝! – Kathandrax

回答

1

發生此錯誤是因爲您需要節點模塊而不是您的自定義模塊。從NodeJS documentation

If the module identifier passed to require() is not a native module, and does not begin with '/', '../', or './', then Node.js starts at the parent directory of the current module, and adds /node_modules, and attempts to load the module from that location. Node will not append node_modules to a path already ending in node_modules.

solution.js

var myModule = require('./module'); 
// The rest of your code. 
+0

你是對的!代碼現在正在完美工作。非常感謝你!我用正確的版本編輯了第一條消息。 – Kathandrax