我有2个文件,我试图将一个变量从一个传递到另一个。Tcp.js接收这个变量,但是如果data.js中的变量发生了变化,Tcp.js不会看到这个变化。有没有一种方法可以让tcp.js看到这些变化?
data.js
var {eventEmitter} = require('./events.js');
var storedData = 'Hello from Data';
var myEventHandler = function (data) {
console.log(data)
storedData = data;
}
eventEmitter.on('message-test', myEventHandler);
module.exports = { storedData };
tcp.js
var net = require('net');
const config = require ('../config'); // various info
const port2 = config.TCP_PORT || 8000;
const {storedData} = require ('./data.js');
// testing to see if the variable is changing
var interval = setInterval(function() {
console.log(storedData);
},2000)
var server = net.createServer();
server.on('connection', function(socket) {
var remoteAddress = socket.remotePort;
console.log('A new client has connected!');
socket.write(storedData);
socket.once('close', function() {
console.log('The connection from %s has been closed', remoteAddress);
clearInterval(interval);
});
});
server.listen(port2, function() {
console.log('TCP server listening on %s', port2 );
});
常规变量不能这样做——它们将按值传递,因此会被复制。
您可以像这样通过函数返回常规变量的值——因此,不是导出变量,而是导出返回变量值的函数。然后从另一个模块调用该函数。
或者你可以使用对象({}),因为它是通过引用传递的,所以如果你从一个模块导出对象并在另一个模块中使用它,它们都引用相同的东西并且可以共享状态。