Node.js - 在这里需要mongoose导致冗余?

时间:2012-06-28 02:18:49

标签: node.js arguments mongoose require redundancy

我有以下Node.js目录结构。

|--app/
   |--app.js
   |--routers/
      |--index.js/
   |--models/
      |--schemas.js
      |--post.js

app.js 中,有一行喜欢这个mongoose.connect('mongodb://localhost/' + config.DB_NAME);。在 schema.js

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

var PostSchema = new Schema({
    title: String
    , author: String
    , body: String
    , creataAt: { 
        type: Date
        , default: Date.now
    }
});

// other schemas goes here

module.exports.PostSchema = PostSchema;

post.js

var mongoose = require('mongoose')
    , PostSchema = require('./schemas').PostSchema
    , PostModel = mongoose.model('Post', PostSchema);

module.exports = PostModel;

index.js 中,可能有一行喜欢这样:var PostModel = require('../models/post');。上面提到的所有文件都需要 mongoose schemas.js 的目的是帮助程序员在单个文件中掌握数据库的模式。但是,我想知道这个工具是否会导致冗余并导致更多开销,因为我需要 mongoose 。我应该将其作为参数传递吗?

2 个答案:

答案 0 :(得分:9)

如果你只是担心表现,你不必是。根据{{​​3}}:

  

缓存

     

模块在第一次加载后进行缓存。这意味着   (除此之外)每次拨打require('foo')都会得到   返回完全相同的对象,如果它将解析为相同   文件。

     

多次调用require('foo')可能不会导致模块代码   多次执行。这是一个重要的特征。用它,   可以返回“部分完成”的对象,从而允许传递   即使它们会导致循环,也要加载依赖项。

     

如果您想让模块多次执行代码,那么导出   一个函数,并调用该函数。

所以,你每次都不是requiring猫鼬;相反,每次在第一次之后,都会返回缓存的Mongoose模块。

答案 1 :(得分:0)

当需要来自链接模块的猫鼬时,您还需要注意。在mongoose的情况下,你最常依赖单例模式来进入mongodb连接,缓存机制可能会妨碍模块化。 我可能做错了什么,但我在那里详述了问题:https://stackoverflow.com/questions/16687619/node-js-require-do-not-behave-as-expected-when-using-linked-packages