哪些模块可见?

时间:2015-02-26 15:22:10

标签: javascript node.js

我在理解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需要范围"并没有给我任何好的结果)

1 个答案:

答案 0 :(得分:1)

回答评论:

mongoose保留对每个模型的引用。 require只是常规JavaScript;它返回一个对象,该对象没有异常的限制。但require中的mongooseconfig.js仍然是必要的;没有它,app/models/user.server.model[.js]将永远不会运行并注册一个模型与猫鼬。