簡體   English   中英

模塊和Node.js

[英]Modules and Node.js

我正在嘗試通過Learnyounode課程來學習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”而不是“ 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);
    }
  });
}

兩者都是正確的,但是完成本章需要第二個版本。

發生錯誤是因為您需要節點模塊而不是自定義模塊。 NodeJS文檔中

如果傳遞給require()的模塊標識符不是本機模塊,並且不是以'/'、'../'或'./'開頭,則Node.js從當前模塊的父目錄開始,並添加/ node_modules,然后嘗試從該位置加載模塊。 節點不會將node_modules附加到已經以node_modules結尾的路徑。

solution.js

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM