我有从在线资源借用的这段代码(效果非常好):
var express = require('express');
var bodyParser = require('body-parser');
var logger = require('morgan');
var app = express();
require('./init/db');
require('./init/cache'); //Bring in Redis
//Define Routes
var userRoutes = require('./routes/user');
module.exports = app;
我不明白的是,以这种方式使用时“需要”?这是它引入的文件:
//db.js
var mongoose = require('mongoose');
var dbURI = <theURI>;
mongoose.connect(dbURI);
// CONNECTION EVENTS
mongoose.connection.on('connected', function() {
console.log('Mongoose connected successfully');
});
我的 Redis 连接也是如此:
//cache.js
var redis = require("redis");
var redisClient = redis.createClient(process.env.CACHE_PORT, process.env.CACHE_URL);
redisClient.auth(process.env.CACHE_PASS);
redisClient.on("ready", function () {
console.log("Cache is connected");
});
但正如你所看到的,没有module.exports
任何地方在db.js
or cache.js
文件!当我用谷歌搜索这个来了解它是如何工作的时,例子总是谈论module.exports
and require
一起。
问题
有人可以解释一下 require 像这样单独使用时是如何工作的吗?
如何使缓存/Redis 连接可用,以便可以在我的应用程序中使用它userRoutes
使用类似以下内容的文件:var userRoutes = require('./routes/user')(redis);
有人可以解释一下这段代码发生了什么吗?换句话说,require 不与导出一起使用时如何工作。
我们几乎总会看到require()
与一起使用module.exports
,但你不必这样做。当您不导出任何内容时,导入模块中的代码仍将运行,但您无法将导入绑定到变量并与其交互。
考虑以下Foo.js
模块 :
var foo = {};
foo.greet = function(){
console.log('Hello from Foo!');
}
foo.greet();
我可以在我的主文件中导入这个模块,如下所示:
require('./foo');
如果我运行这个主文件,里面的代码Foo.js
模块将运行,并且福,你好!将被打印到控制台。
但是,我无法直接与 foo 对象交互。以下代码将不起作用:
require('./foo');
foo.greet(); //ReferenceError, foo is not defined
我可以将模块导入绑定到变量,但即使这样也行不通:
var foo = require('./foo');
foo.greet(); //TypeError, foo.greet is not a function
为了让它工作,我需要使用以下命令从我的模块中导出 foo 对象module.exports
你所熟悉的。
这表明您不需要从模块中导出任何内容,就像您不需要在需要时将导入的模块绑定到变量一样。不同之处在于,如果您不导出不想在该模块中显示的内容,则您将无法与导入模块中的代码进行交互。
在您问题的代码中,导入 Redis 是有效的,因为该模块是独立的,您不需要在代码中与它交互。只需要导入代码即可运行(需要主Redis模块并创建客户端)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)