学習課題として、再利用可能なルーターを Node.js で構築しようとしています。
私のルーターのファイル構造は次のようになります。
/myProject
app.js
/routes
index.js
about.js
/modules
/router
router.js
では、オブジェクトapp.js
を作成router
し、ルート フォルダへのパスを渡します。
var Router = require('./modules/router/router');
var router = new Router('./routes');
ルーター オブジェクトのコンストラクター内で、オブジェクトに渡されたパスからファイル名を配列に読み込み、それらをモジュールとしてオブジェクトに追加しようとします。
var fs = require('fs');
var routes = {}
var routesFolder;
function Router(routesPath){
this.routesFolder = routesPath;
fs.readdir(this.routesFolder, this.loadRoutes);
}
Router.prototype.loadRoutes(err, files){
for (var i=0;i<files.length;i++){
var c = files[i].split('.');
if(c[1] === 'js'){
try{
var t = require(routesFolder + '/' + c[0]);
routes['/' + c[0]] = t[c[0]];
}
catch(err){
console.log('Error parsing file: ' + files[i];
console.log(err);
}
}
}
}
私index.js
のabout.js
ファイルは次のようになります。
exports.index = function(req, res){
// Some code here
}
を実行node app.js
し、ルーター オブジェクト./routes
をroute
のパスとして渡します。ファイル名は問題なく読み込まれますが、コンソールの出力は次のとおりです。
Error parsing: index.js
{ [Error: Cannot find module './routes/index'] code: 'MODULE_NOT_FOUND' }
Error parsing: about.js
{ [Error: Cannot find module './routes/about'] code: 'MODULE_NOT_FOUND' }
いくつかの異なる方法でルート ファイルを変更しようとしました。
module.exports = function(){...}
module.exports.index = function(){...}
しかし、これは効果がありません。とについて私が理解していることnode
からrequire
、これはうまくいくはずです。私は少し初心者なので、ここでの問題がばかげている場合はご容赦ください。