在NodeJS中使用模块内的模块

时间:2017-05-26 09:16:11

标签: javascript node.js module memcached require

我对nodejs相当新。写我的第一个申请。我已经习惯了php。

为了保持代码的整洁和清洁,我总是在单独的文件中编写函数,并在php中根据需要包含它们。

然而,在nodejs中,我必须要求它们,就像我需要一个模块一样。 例如。

functions.js

module.exports = {
check_db : function(key){

},

check_cache : function(key){
    memcached.get(key,function(err, data){
        console.log(data);
    });
},

};

包含在主应用程序中,如此

// Establish connection with cache and database
const mysql = require('mysql2');
const Memcached = require('memcached');
const memcached = new Memcached('localhost:11211');
const bb = require('bot-brother');

//Load the database cache functions
const dbc = require("./functions");
dbc.check_cache(123);

现在我可以从主应用程序文件访问dbc中的函数,但我不能使用函数文件中主应用程序中所需的模块。 我收到一个没有定义memcached的错误。

我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

简单的解决方案,您可以在require("memcached")文件中functions.js并在此处创建服务器。但我不会选择这个解决方案,因为如果你需要其他地方的memcache,你就可以在memcache服务器上打开很多连接。

IMO的另一个更清洁的解决方案是将memcache依赖注入您的服务(或functions,因为您调用它们)。 (这种做法被称为依赖注入,如果你想了解它并有什么好处)

以下是它的工作方式:

  • 您仍然在主文件中创建memcache连接;
  • 而不是在functions.js中导出原始json对象,而是导出一个带参数的函数(此处为memcache
  • 在您的主文件中,您需要该功能并调用它以获得您想要的服务。

以下是代码的样子:

main.js

//Load the database cache functions
const dbcFactory = require("./functions");
const dbc = dbcFactory(memcached)

functions.js

module.exports = function (memcached) {
  return {
    check_db : function(key){},

    check_cache : function(key){
      memcached.get(key,function(err, data){
        console.log(data);
      })
    }
};