我有以下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 。我应该将其作为参数传递吗?
答案 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