使用导出对象导出对象

Con*_*ack 15 javascript oop node.js

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

如果它有助于我开发节点.

c0d*_*nja 18

这是我创建模块的方式:

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;
Run Code Online (Sandbox Code Playgroud)

要在另一个JS文件中使用此模块,您可以require正常使用和使用您的对象:

someFile.js

var myObject = require('myModule');

myObject.function1(param1, function(err, result) { 
    ...
});
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*gem 5

在一个文件中:

module.exports.myObj = some object...;
Run Code Online (Sandbox Code Playgroud)

在另一个中:

Obj = require('myFile.js').myObj;
Run Code Online (Sandbox Code Playgroud)

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

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

module = { 'exports' : {} };
(function(module){
    //your js file
    ...
})(module)
Run Code Online (Sandbox Code Playgroud)


Vah*_* PG 5

当然可以。在我的示例中,我使用obj来保存我的配置信息。我将其放在文件夹中的文件index.jsconfig。这使索引成为I时首选的选择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
};
Run Code Online (Sandbox Code Playgroud)

呼叫import config from '../config';将选择默认电话。如果我指定我可以得到db出口import { db } from '../config';