Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js编辑另一个文件中的变量_Javascript_Node.js - Fatal编程技术网

Javascript node.js编辑另一个文件中的变量

Javascript node.js编辑另一个文件中的变量,javascript,node.js,Javascript,Node.js,您好,我今天刚开始学习node.js,从另一个文件获取变量并编辑它时遇到问题 我正在尝试从server.js获取变量bots并在bots.js中编辑它 server.js: var bots = [ { botID: '16f11103', userID: '12345' }, { botID: '5657d5e9', userID: '54321' } ]; setInterval(() => { console.log(bots); }, 5000); module.exp

您好,我今天刚开始学习node.js,从另一个文件获取变量并编辑它时遇到问题

我正在尝试从server.js获取变量bots并在bots.js中编辑它

server.js:

var bots = [
  { botID: '16f11103', userID: '12345' },
  { botID: '5657d5e9', userID: '54321' }
];

setInterval(() => { console.log(bots); }, 5000);

module.exports.bots = bots;
bots.js:

var request = require("../server.js");
var unique_id = '16f11103';

if (request.bots.some(e => e.botID === unique_id)) {
  request.bots = request.bots.filter(function(e) {
    return e.botID != unique_id;
  });
}
你应该这样做

    var bots = [
        { botID: '16f11103', userID: '12345' },
        { botID: '5657d5e9', userID: '54321' }
    ];

    setInterval(() => { console.log(bots); }, 5000);

    module.exports = bots;
而不是

module.exports.bots = bots;
你也可以

exports.bots = bots;
然后像这样使用

var bots = require("./server.js");
var unique_id = '16f11103';

if (bots.some(e => e.botID === unique_id)) {
     bots = bots.filter(function(e) {
    return e.botID != unique_id;
  });
}

一种方法是创建一个函数来设置变量
bots

注意:我建议不要使用单独的变量和函数,而是使用类似于a的方法对机器人周围的所有功能进行分组

server.js

var bots = [
  { botID: "16f11103", userID: "12345" },
  { botID: "5657d5e9", userID: "54321" },
];

var setBots = (newBots) => (bots = newBots);

setInterval(() => {
  console.log(bots);
}, 5000);

module.exports = { bots, setBots };
var { bots, setBots } = require("./server.js");
var unique_id = "16f11103";

if (bots.some((e) => e.botID === unique_id)) {
  var newBots = bots.filter(function (e) {
    return e.botID != unique_id;
  });

  setBots(newBots);
}
bots.js

var bots = [
  { botID: "16f11103", userID: "12345" },
  { botID: "5657d5e9", userID: "54321" },
];

var setBots = (newBots) => (bots = newBots);

setInterval(() => {
  console.log(bots);
}, 5000);

module.exports = { bots, setBots };
var { bots, setBots } = require("./server.js");
var unique_id = "16f11103";

if (bots.some((e) => e.botID === unique_id)) {
  var newBots = bots.filter(function (e) {
    return e.botID != unique_id;
  });

  setBots(newBots);
}

它之所以不起作用,是因为JavaScript中的变量是如何修改的(想想复制引用vs值)

首次导出server.js中的
bots
变量时:

var bots = [
  { botID: '16f11103', userID: '12345' },
  { botID: '5657d5e9', userID: '54321' }
];

setInterval(() => { console.log(bots); }, 5000);

module.exports.bots = bots;
module.exports.bots=bots;
module.exports.bots
通过引用指向
bots
变量。如果直接修改数组,如
module.exports.bots[0]=1
,则由于引用未更改,它也将反映在原始
bots
变量中

但是,您所做的是完全重新分配module.exports.bots值。返回新数组而不修改原始数组

当您这样做时:

request.bots=request.bots.filter(函数(e){
返回e.botID!=唯一的\u id;
});
使
module.exports.bots
变量指向新数组,而不再指向原始
bots
数组。这就是为什么您的console.log调用总是打印相同的数组,因为原始的bots变量仍然指向该数组,并且从未修改过

如果不想直接修改数组,可以尝试此操作

server.js

var request = {};

request.bots = [
  { botID: '16f11103', userID: '12345' },
  { botID: '5657d5e9', userID: '54321' }
];

setInterval(() => { console.log(request.bots); }, 5000);

module.exports = request;
bots.js现在可以保持完全相同

var request=require(../server.js”);
var unique_id='16f11103';
if(request.bots.some(e=>e.botID==unique_id)){
request.bots=request.bots.filter(函数(e){
返回e.botID!=唯一的\u id;
});
}

您测试过此代码吗?因为这仍然不起作用,导入应该是var bots=require('./server.js'),您的问题/错误是什么?