0

私はnode.js(およびjavascript)を使い慣れていません。アプリケーションの良い構造を得るためのチュートリアルに従っています。Node.js:アプリケーションを整理する:別々のファイルでルートとモデルを使用する、ルートからモデルを取得するにはどうすればよいですか?

まず、ルートを別のフォルダに入れたいと思っていました。

のは、これが私のmain.jsあるとしましょう:他人のファイルをロードするために使用index.jsと、user.jsの

:私の "ルート" フォルダに

var express = require('express'); 

const PORT = 3000; 
const app = express(); 

app.set("json spaces", 2); 

require('./routes')(app); 

app.listen(PORT, function() { 
    console.log(`users-jwt-api - Port ${PORT}`) 
}); 

、私は2つのファイルを持っていますindex.js:

var fs = require('fs'); 

module.exports = function(app){ 
    fs.readdirSync(__dirname).forEach(function(file) { 
     if (file == "index.js") return; 
     var name = file.substr(0, file.indexOf('.')); 
     require('./' + name)(app); 
    }); 
} 

user.jsの:

module.exports = function(app) { 
    app.get('/users', function(req, res) { 
     //no bd yet, returning static data, and dont want it here, but in a model 
     res.json({users:[{username: "titi", password:"toto"},{username: "tata", password:"tutu"}]}); 
    }); 
}; 

これは魅力的です!ファイン。

しかし、私のルートファイルにはデータベースコードは必要ありませんので、私は "models"フォルダを追加しようとしています。私はちょうどルートのように、index.jsの内側に入れ、そしてこのようなusers.js:

module.exports = function(app) { 
    return { 
     findAll: function(params, callback) { 
     //no db yet 
     return callback([{username: "titi", password:"toto"},{username: "tata", password:"tutu"}]); 
     } 
    }; 
}; 

私はちょうどルートの前に、これを追加することで、私のmain.jsを変更した:

require('./models')(app); 

質問:私のルート/ user.jsをこのモデルを呼び出すように変更する方法はわかりません!

私はルート/ users.jsにこのような何かを持っているしたいと思います:

module.exports = function(app) { 
    const Users = app.models.users; // not working here : TypeError: Cannot read property 'users' of undefined 
    app.get('/users', function(req, res) { 
     Users.findAll({}, function(users) { 
     res.json({users: users}); 
     }); 
    }); 
}; 

どのように私はアプリのVAR経由で私のモデルを使用することができますか?

注:私は、依存関係注入のための "config"というモジュールを備えたソリューションを見つけましたが、そのような強力なショートカットを使用する前に単純なコーディングを使用したいと思います。

ありがとう!

答えて

0

あなたがmodels.jsの仕事ですapp のプロパティとしてそれを定義する必要がありmodelsアクセスしたい場合は、私は言うでしょう。あなたはmodels.jsにアプリを渡していますが、それはまったく変更されません。

私はより多くのように、このようにmodels.jsを変更することはお勧めします:

module.exports = function(app) { 
    app.models = { 
    users : // import db and return users so routes can avail of them 
    }; 
}; 
+1

どうもありがとう!とった ! – Julien

関連する問題