2013-06-22 2 views
0

Я прочитал статью в этой ссылке http://theholmesoffice.com/mongoose-and-node-js-tutorial/ здесь есть код:Mongoose ODM использовать

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'); 

Я не понимаю, почему у этих двух есть другой подход, а какой лучший и почему? Кто-нибудь может мне помочь, пожалуйста. Одна вещь, которую я наблюдал, заключается в том, что второй подход является наиболее используемым. Поэтому, пожалуйста, помогите мне в выборе лучшего подхода. Я знаю, что это в основном связано с созданием схем в Mongodb, и поэтому метод Once выглядит немного лучше. Но все же я совсем не уверен. Пожалуйста помоги.

ответ

1

В основном, в первом подходе - это жутко показывает вам, что вы можете сделать с мангустом. Предполагается, что где-то вы открывали соединение с базой данных (предположительно несколько строк кода назад). Затем он прослушивает событие и выполняет всю работу позже. Это только для того, чтобы показать вам, что вы можете сделать.

Для intance это создает модель mongoose (она не полагается на открытое соединение с базой данных) - следовательно, она может быть легко добавлена ​​из отдельного файла и обычно записывается как модуль, как и во втором подходе

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); 
    } 

Первая линия - вы выполняете поиск в базе данных, если не заблуждается не был возвращен - закрыть соединение, запись результатов и т.д ..

В любом случае, чтобы подвести итог - первый подход, как правило, второе - это то, что нравится в реальном мире, где вы отделяете логику, делаете модели многоразовыми и включаемыми, где у вас есть логика маршрутизатора.

+0

Спасибо .. Я получил смысл сейчас. Большое спасибо. –

+0

Я написал оригинальную статью как часть серии, создающей части стека. Метод подключения здесь не показывает лучших практик - вы должны обычно открывать свое соединение, когда ваше приложение запускается, и закрывать его, когда он заканчивается. Я написал дополнительную статью, разъясняющую это: http://theholmesoffice.com/mongoose-connection-best-practice/ –