我在这个链接中读到了一篇文章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中创建方案,所以once方法看起来好不到哪里去。但我还是一点也不确定。请帮帮忙。
发布于 2013-06-22 15:43:04
基本上,在第一种方法中-它微不足道地向您展示了您可以对mongoose做什么。它假设您在某个地方打开了一个到数据库的连接(可能是几个返回的代码串)。然后,它监听事件,并在以后完成所有工作。它只是为了向你展示你能做什么。
就意图而言,这创建了一个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);
}第一行-在数据库上执行find,如果没有返回错误-关闭连接,记录结果,等等。
总之,总而言之-第一种方法通常是一种炫耀,第二种方法-是现实世界中的情况-在现实世界中,你分离逻辑,使模型可重用和可包含,其中你有路由器逻辑
https://stackoverflow.com/questions/17248031
复制相似问题