我在理解NodeJS require()时遇到问题。 基本上我有这3个文件:
moongooseconfig.js
var config = require('./config');
var mongoose = require('mongoose');
module.exports = function() {
var db = mongoose.connect(config.db);
require('../app/models/user.server.model');
return db;
}
usercontroller.js
var User = require('mongoose').model('User');
exports.create = function(req, res, next) {
var user = new User(req.body);
user.save(function(err) {
if(err) {
return next(err);
} else {
res.json(user);
}
});
};
和server.js
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
var mongoose = require('./config/mongooseconfig');
var express = require('./config/express');
var db = mongoose();
var app = express();
app.listen(3000);
我对require的理解是所需的模块仅在需要该模块的JS文件中可见。 我不明白为什么用户控制器可以使用mongoose Model' User'无需模型文件。 然而,mongooseconfig需要函数内的模型文件而不将其保存到变量。
有人可以告诉我那里发生了什么吗?每个文件都可以在任何地方需要访问模块吗? (也许我只是为了盲目,但我无法在Node文档中找到答案,谷歌搜索" nodejs需要范围"并没有给我任何好的结果)
答案 0 :(得分:1)
回答评论:
mongoose保留对每个模型的引用。 require
只是常规JavaScript;它返回一个对象,该对象没有异常的限制。但require
中的mongooseconfig.js
仍然是必要的;没有它,app/models/user.server.model[.js]
将永远不会运行并注册一个模型与猫鼬。