0

このリンクの記事を読みましたhttp://theholmesoffice.com/mongoose-and-node-js-tutorial/ ここにコードがあります:

exports.teamlist = function(gname,callback){


db.once('open', function(){
  var teamSchema = new mongoose.Schema({
   country: String,
   GroupName: String
  });
  var Team = db.model('Team', teamSchema);
  Team.find({'GroupName':gname}, function (err, teams) {
   if(err){
    onErr(err,callback);
   }else{
    mongoose.connection.close();
    console.log(teams);
    callback("",teams);
   }
  })// end Team.find
 });// end db.once open
};

ここでは db.once メソッドを呼び出しますが、他の場所ではこのように使用されます

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

var postSchema = new Schema({
    thread: ObjectId,
    date: {type: Date, default: Date.now},
    author: {type: String, default: 'Anon'},
    post: String
});

module.exports = mongoose.model('Post', postSchema);

ルーター部分では、このように使用されます

exports.show = (function(req, res) {
    Thread.findOne({title: req.params.title}, function(error, thread) {
        var posts = Post.find({thread: thread._id}, function(error, posts) {
          res.send([{thread: thread, posts: posts}]);
        });
    })
});

そしてapp.jsには

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/norum');

これら2つのアプローチが異なる理由と、どちらが優れているのか、そしてその理由はわかりませんか? 誰でも私を助けてください。私が観察したことの 1 つは、2 番目のアプローチが最もよく使用されていることです。どちらがより良いアプローチであるかについて私を助けてください。これは主に Mongodb でのスキームの作成に関するものであることを私は知っています。しかし、それでも私はまったく確信が持てません。助けてください。

4

1 に答える 1

1

基本的に、最初のアプローチでは、マングースで何ができるかを示しています。どこかでデータベースへの接続を開いていると想定しています (おそらく、いくつかのコードの文字列が戻ってきます)。次に、イベントをリッスンし、後ですべてのジョブを実行します。何ができるかを示すためだけに存在します。

たとえば、これはマングースモデルを作成します(データベース接続が開いていることに依存しません)-したがって、別のファイルから簡単に含めることができ、通常は2番目のアプローチのようにモジュールとして記述できます

var teamSchema = new mongoose.Schema({
   country: String,
   GroupName: String
  });
var Team = db.model('Team', teamSchema);

後で最初のアプローチでデータベースへの接続を閉じますが、それは実際のアプリケーションでやりたいことではありません。接続プールがあり、それを使用してデータベースを頻繁にクエリします。接続を閉じる必要があるのは、アプリケーションの実行を停止する予定がある場合のみです。

  Team.find({'GroupName':gname}, function (err, teams) {
   if(err){
    onErr(err,callback);
   }else{
    mongoose.connection.close();
    console.log(teams);
    callback("",teams);
   }

最初の行 - データベースで検索を実行し、エラーが返されなかった場合 - 接続を閉じ、結果をログに記録するなど..

とにかく、要約すると-最初のアプローチは一般的に見せびらかすものであり、2番目のアプローチは現実の世界での様子です-ロジックを分離し、モデルを再利用可能および包含可能にし、ルーターロジックがある場所

于 2013-06-22T07:43:03.840 に答える