10

学習課題として、再利用可能なルーターを 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.jsabout.jsファイルは次のようになります。

exports.index = function(req, res){
    // Some code here
}

を実行node app.jsし、ルーター オブジェクト./routesrouteのパスとして渡します。ファイル名は問題なく読み込まれますが、コンソールの出力は次のとおりです。

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、これはうまくいくはずです。私は少し初心者なので、ここでの問題がばかげている場合はご容赦ください。

4

1 に答える 1