Javascript node.js编辑另一个文件中的变量
您好,我今天刚开始学习node.js,从另一个文件获取变量并编辑它时遇到问题 我正在尝试从server.js获取变量bots并在bots.js中编辑它 server.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
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'),您的问题/错误是什么?