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

我不明白为什么这两个有不同的方法,哪一个更好,为什么?谁能帮帮我吗。我观察到的一件事是第二种方法是最常用的方法。所以请帮我看看哪个是更好的方法。我知道这主要与在 Mongodb 中创建方案有关,因此 one 方法看起来好一点。但我仍然不确定。请帮忙。

4

1 回答 1

1

基本上,在第一种方法中 - 它向您展示了您可以使用猫鼬做什么。它假定您在某个地方打开了与数据库的连接(大概是几串代码)。然后它监听事件并稍后完成所有工作。它只是为了向您展示您可以做什么。

例如,这会创建一个 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);
   }

第一行 - 你在数据库上执行查找,如果没有返回错误 - 你关闭连接,记录结果等。

无论如何,总而言之 - 第一种方法通常是炫耀,第二种方法 - 是在现实世界中的样子 - 你分离逻辑,使模型可重用和可包含,你有路由器逻辑

于 2013-06-22T07:43:03.840 回答