如果文件未导出,如何使用在单独文件中定义的猫鼬模型?
How to use a mongoose model defined in a separate file if the file is not exported?
考虑一个非常简单的 Express 4 应用结构:
-- app.js
-- models
|--db.js
|--news.js
其中 news.js
包含猫鼬模式和基于该模式的模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var newsSchema = new Schema({
title: String,
subtitle: String,
// other fields...
});
var News = mongoose.model('News', newsSchema);
据我了解,为了让 app.js
使用 News
模型,它必须在脚本中要求这样的文件:require('./models/news')
。此外,news.js
必须像这样导出模型:module.exports = News;
.
但是,我遇到过许多脚本,这些脚本不导出在单独文件中定义的模型(或任何与此相关的内容),但仍然能够在不同文件中使用这些模型 and/or 模式只需要求模型文件,然后执行如下操作:
var mongoose = require('mongoose');
var News = mongoose.model('News');
这种行为怎么可能?这是Mongoose的一个特殊功能?如果 model/schema 未在该文件中导出,一个文件如何使用另一个文件中定义的模型或模式?
这最终会起作用,因为当您在各种文件中调用 require('mongoose')
时,您会得到相同的对象。换句话说:在您的情况下,它在 app.js
和 news.js
之间共享。
当您创建新模型(使用 mongoose.Model('Name', schema)
)时,Mongoose 将该模型实例存储在模型的内部列表中。
这还允许您使用 mongoose.Model('Name')
按名称获取实例。 Mongoose 将在其内部列表中查找该模型,然后 return 它。
考虑一个非常简单的 Express 4 应用结构:
-- app.js
-- models
|--db.js
|--news.js
其中 news.js
包含猫鼬模式和基于该模式的模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var newsSchema = new Schema({
title: String,
subtitle: String,
// other fields...
});
var News = mongoose.model('News', newsSchema);
据我了解,为了让 app.js
使用 News
模型,它必须在脚本中要求这样的文件:require('./models/news')
。此外,news.js
必须像这样导出模型:module.exports = News;
.
但是,我遇到过许多脚本,这些脚本不导出在单独文件中定义的模型(或任何与此相关的内容),但仍然能够在不同文件中使用这些模型 and/or 模式只需要求模型文件,然后执行如下操作:
var mongoose = require('mongoose');
var News = mongoose.model('News');
这种行为怎么可能?这是Mongoose的一个特殊功能?如果 model/schema 未在该文件中导出,一个文件如何使用另一个文件中定义的模型或模式?
这最终会起作用,因为当您在各种文件中调用 require('mongoose')
时,您会得到相同的对象。换句话说:在您的情况下,它在 app.js
和 news.js
之间共享。
当您创建新模型(使用 mongoose.Model('Name', schema)
)时,Mongoose 将该模型实例存储在模型的内部列表中。
这还允许您使用 mongoose.Model('Name')
按名称获取实例。 Mongoose 将在其内部列表中查找该模型,然后 return 它。