导出并要求在节点.js中使用范围

Exports and require scope in node.js

本文关键字:节点 js 使用范围      更新时间:2023-09-26

与这个问题斗争了5天。我有 3 个文件,需要在它们之间共享一个可变的 kvmIndex

getKvmIndex.js

var kvmIndex=[],
exports.kvmIndex = kvmIndex;
exports.getSNMP = function (callback) {
   async.each(switchIps, function(switchIp, callback1) {
   goGo(switchIp, callback1);
   }, function(err) {
        callback();
    })
};

匹配.js

var app1 = require("./app.js");
var kvmIndex;
exports.kvmIndex = kvmIndex;
...
exports.matchAll = function(callback) {
async.series([
    function(callback) {
        kvmIndex = app1.kvmIndex;
        decToHex(callback);
    },
    function(callback){
        matchSt('getPortToSt2', callback);
    },
    function(callback){
        console.log(kvmIndex);    //Here it defined! Works good.
        callback()
    }
])
callback();
}

应用.js

var kvmSNMP = require('./getKvmIndex')
, match = require('./match')
, async = require('async')
, kvmIndex = [];
...
async.series([
function(callback) {
    kvmSNMP.getSNMP(callback);
},
function(callback) {
    exports.kvmIndex = kvmSNMP.kvmIndex;
    callback();
},
function(callback) {
    match.matchAll(callback);
},
function (callback) {
    kvmIndex = match.kvmIndex;
    callback();
},
function (callback) {
    console.log(match.kvmIndex); //Doesnt work(
    callback();
}
])

我在做什么:

  • 定义空白变量
  • 导出它
  • 在全球范围内使用它做事
  • 在应用程序中访问它.js

getKvmIndex中.js它工作正常,但在匹配中.js没有。有人可以帮助我吗?

您需要

在一个模块(文件)中定义kvmIndex,并且只需要一个模块(文件)。它那个模块,像你一样exports添加到它。其他模块(文件)需要require定义kvmIndex的模块,并通过访问myModule.kvmIndex来使用它。

笔记:

1)最好从getKvmIndex.js导出getKvmIndex(),而不是直接kvmIndex变量。

2)你可能在match.js中有一个错误——回调会立即被调用。您是否可能打算将callback和第二个参数传递给async.series()