3

これが私のフォルダ構造だと考えてください

express_example
|---- app.js    
|---- models    
|-------- songs.js    
|-------- albums.js    
|-------- other.js    
|---- and another files of expressjs

ファイルsongs.jsの私のコード

var mongoose = require('mongoose')
, Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;

var SongSchema = new Schema({
name: {type: String, default: 'songname'}
, link: {type: String, default: './data/train.mp3'}
, date: {type: Date, default: Date.now()}
, position: {type: Number, default: 0}
, weekOnChart: {type: Number, default: 0}
, listend: {type: Number, default: 0}
});

mongoose.model('Song', SongSchema);

ファイルalbums.js内

  var mongoose = require('mongoose')
, Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;

var AlbumSchema = new Schema({
name: {type: String, default: 'songname'}
, thumbnail: {type:String, default: './images/U1.jpg'}
, date: {type: Date, default: Date.now()}
, songs: [SongSchema]
});
mongoose.model('Album', AlbumSchema);

次の方法で任意のモデルを取得できます。

require('mongoose').model(name_of_model);

しかし、name_of_modelではなく単純なコードで特定のフォルダー内のすべてのモデルを要求するにはどうすればよいですか?上記の例では、フォルダー./models/*内のすべてのモデル

4

3 に答える 3

8

「model」フォルダ内の各ファイルにモデルをエクスポートしました。たとえば、次のようにします。

exports.SongModel = mongoose.model('Song', SongSchema);

次に、モデルフォルダに「index.js」という名前の共通ファイルを作成し、次の行を記述します

exports = module.exports = function(includeFile){  
  return require('./'+includeFile);
};

次に、「Song」モデルが必要なjsファイルに移動し、次のようにモジュールを追加します。

var SongModel = require(<some_parent_directory_path>+'/model')(/*pass file name here as*/ 'songs');

たとえば、songslist.js内のすべての曲と、親ディレクトリに配置されたファイルを次のように一覧表示するコードを記述した場合、

|---- models
|-------- songs.js
|-------- albums.js
|-------- other.js
|---- and another files of expressjs
|---- songslist.js

次に、次のような「曲モデル」を追加できます

var SongModel = require('./model')('songs');

注:これを実現するには、さらに別の方法があります。

于 2013-01-02T14:56:29.513 に答える
8
var models_path = __dirname + '/app/models'
fs.readdirSync(models_path).forEach(function (file) {
  require(models_path+'/'+file)
})
于 2013-01-03T05:37:21.837 に答える
2

node-require-allなどのモジュールを使用すると、特定のフォルダーからすべてのファイルを要求できます(フィルター基準を使用することもできます)。

例を示すには(モジュールのreadmeファイルから取得):

var controllers = require('require-all')({
  dirname     :  __dirname + '/controllers',
  filter      :  /(.+Controller)\.js$/,
  excludeDirs :  /^\.(git|svn)$/
});

// controllers now is an object with references to all modules matching the filter
// for example:
// { HomeController: function HomeController() {...}, ...}

これであなたのニーズを満たすことができると思います。

于 2013-01-02T11:58:00.030 に答える