【问题标题】:How to require a file in node.js and pass an argument in the request method, but not to the module?如何在 node.js 中要求一个文件并在请求方法中传递一个参数,而不是传递给模块?
【发布时间】:2012-02-08 16:31:05
【问题描述】:

我有一个必须加载的 module.js;为了工作需要objectX;

如何在node.js提供的require方法中将objectX传递给module.js?

谢谢

// my module.js
objectX.add('abc');
// error: objectX is undefined

我想要一种方法来做到这一点,而不必更改我所有的课程,因为这会花费很多时间......而且他们的方式对于客户端来说具有良好的性能。 (我将客户端文件与服务器文件混合在一起***)

【问题讨论】:

    标签: node.js require


    【解决方案1】:

    您可以通过链接“init”方法(随意命名)来避免更改实际导出的对象。

    模块TestModule.js:

    var x = 0; // Some private module data
    
    exports.init = function(nx) {
        x = nx; // Initialize the data
        return exports;
    };
    
    exports.sayHi = function() {
        console.log("HELLO THERE "+x);
    };
    

    然后像这样要求它:

    var TM = require('./TestModule.js').init(20);
    TM.sayHi();
    

    【讨论】:

      【解决方案2】:

      您编写的模块可以导出单个函数。当您需要该模块时,请使用您的初始化参数调用该函数。该函数可以返回一个对象(哈希),您将其放入 require-ing 模块中的变量中。换句话说:

      main.js

      var initValue = 0;
      var a = require('./arithmetic')(initValue);
      // It has functions
      console.log(a);
      // Call them
      console.log(a.addOne());
      console.log(a.subtractOne());
      

      算术.js:

      module.exports = function(initValue) {
        return {
          addOne: function() {
            return initValue + 1;
          },
          subtractOne: function() {
            return initValue - 1;
          },
        }
      }
      

      【讨论】:

      • 好吧,我不想这么说,但 objectX 必须是全局的。在您的通话文件中,您可以设置global.objectX = "hi"
      【解决方案3】:

      像导出一些 init 方法并在请求后立即将 objectX 作为参数传递的解决方法怎么样?

      var module = require('moduleJS');
      module.init(objectX)
      

      【讨论】:

      • 我有很多这样的类: t.add({...class...});但“t”是未定义的。我需要以某种方式将“t”放入模块中。我在问题中添加了一些信息
      猜你喜欢
      • 2022-01-05
      • 2019-09-29
      • 2018-12-09
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多