【问题标题】:Exporting Objects with the Exports Object使用 Exports 对象导出对象
【发布时间】:2012-09-10 06:53:15
【问题描述】:

假设我有一个包含 javascript 对象的 .js 文件。我希望能够从同一目录中的另一个 .js 文件访问该对象及其所有功能。我可以简单地将这个对象与module.exports 对象和require() 一起导出到另一个.js 文件中吗?如果可以,可以举个例子吗?

如果它有助于我使用 node 进行开发。

【问题讨论】:

    标签: javascript oop node.js


    【解决方案1】:

    在一个文件中:

    module.exports.myObj = some object...;
    

    在另一个方面:

    Obj = require('myFile.js').myObj;
    

    节点上的 js 文件中的所有内容都是该文件的本地文件,除非您将其放在导出对象中。这实际上与浏览器中的 JavaScript 非常不同——在浏览器中,所有导入的文件都像一个大文件一样组合在一起。

    您可以将节点文件视为创建模块对象并将其传递给围绕您的代码的函数。

    module = { 'exports' : {} };
    (function(module){
        //your js file
        ...
    })(module)
    

    【讨论】:

      【解决方案2】:

      这是我创建模块的方式:

      myModule.js

      var MyObject = function() {
      
          // This is private because it is not being return
          var _privateFunction = function(param1, param2) {
              ...
              return;
          }
      
          var function1 = function(param1, callback) {
              ...
              callback(err, results);    
          }
      
          var function2 = function(param1, param2, callback) {
              ...
              callback(err, results);    
          }
      
          return {
              function1: function1
             ,function2: function2
          }
      }();
      
      module.exports = MyObject;
      

      要在另一个 JS 文件中使用这个模块,你可以简单地使用 require 并像往常一样使用你的对象:

      someFile.js

      var myObject = require('myModule');
      
      myObject.function1(param1, function(err, result) { 
          ...
      });
      

      【讨论】:

      • 那么,如果在节点中,我不返回对象定义末尾的函数,我将无法访问(私有)函数?即使我需要模块?
      • 正确,您将无法通过对象访问它们。 myObject._privateFunction(p1,p2) 会抛出错误 TypeError: Object #<Object> has no method '_privateFunction'
      【解决方案3】:

      当然可以。在我的示例中,我使用 obj 来保存我的配置信息。我将它放在config 文件夹中的一个名为index.js 的文件中。这使得索引成为我import 'config' 时的首选。我在这里有 2 个导出,一个用于我的节点和 api 东西,另一个用于我的数据库。你可以忽略我设置环境的第一位。

      const environment = {
        development: {
          isProduction: false
        },
        production: {
          isProduction: true
        }
      }[ process.env.NODE_ENV || 'development' ];
      
      export default Object.assign({
        host: 'localhost',
        port: '3000',
        remoteApi: {
          token: {
            'X-Token': '222222222222222222'
          },
          base: 'https://www.somedomain.com/api'
        }
      }, environment);
      
      export const db = {
        dbHost: 'localhost',
        dbPort: 176178
      };
      

      调用import config from '../config'; 将选择默认值。如果我指定我可以得到db export import { db } from '../config';

      【讨论】:

      • 如何在require中使用特定的import { db } from '../config'??
      【解决方案4】:

      我认为最简单的方法:

      编写 Person.js:(注意它带有 ctor)

      module.exports = function (firstName, lastName) {
          this.firstName = firstName;
          this.lastName = lastName;
          this.fullName = function () { 
              return this.firstName + ' ' + this.lastName;
          }
      }
      

      并消费它:

      var person = require('./Person.js');
      
      var person1 = new person('James', 'Bond');
      
      console.log(person1.fullName());
      

      请注意,在这个简单的解决方案中,所有方法都是“公共的”。

      参考:https://www.tutorialsteacher.com/nodejs/nodejs-module-exports

      【讨论】:

        猜你喜欢
        • 2012-06-25
        • 1970-01-01
        • 2011-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-12
        • 2014-05-14
        相关资源
        最近更新 更多