节点:所需文件的名称冲突

Node: name collision on required files

本文关键字:冲突 文件 节点      更新时间:2023-09-26

感谢阅读!

如何避免名称冲突?这是我的问题吗?这个词合适吗?

我是node的新手&Javascript和编写一个应用程序,可以与不同类型的网络设备(tcp on 23)对话。

我决定为每个设备创建一个单独的js文件,并在我的app.js文件中require它们。

当我启动应用程序时,apple1连接,但一旦banana1连接,我就失去了与apple1的连接。我没有从apple1得到断开连接的消息。

我怀疑有某种类型的变量名冲突,因为当我改变苹果最后连接的顺序时,香蕉是我失去连接的那个。为了支持我的怀疑,在我分配self = this;banana.js中,我将其更改为somethingElse = this。通过这样做,我可以同时连接到两个设备。

app.js

var deviceA = require('./apple.js');
var apple1 = new deviceA({
  ipAddress: "192.168.1.97",
  port: 23
})
apple1.connect();
apple1.on('connect', function(data) {
  console.log('Apple: Device Connected @' + apple1.ipAddress);
})
apple1.on('disconnect', function(data) {
  console.log('Apple: Device Disconnected');
})
var deviceA = require('./banana.js');
var banana1 = new deviceA({
  ipAddress: "192.168.1.97",
  port: 23
})
banana1.connect();
banana1.on('connect', function(data) {
  console.log('Banana: Device Connected @' + banana1.ipAddress);
})
banana1.on('disconnect', function(data) {
  console.log('Banana: Device Disconnected');
})

apple.js

var events = require('events');
var Apple = function(opts) {
  this.ipAddress = opts.ipAddress;
  this.port = opts.port;
};
Apple.prototype = new events.EventEmitter;
module.exports = Apple;
Apple.prototype.connect = function() {
  self = this;
  // telnet to apple
  var net = require('net');
  self.connection = net.createConnection(self.port, self.ipAddress);
  self.connection.setEncoding("UTF8");
  self.connection.on('connect', function(data) {
    self.emit('connect');
  });
  self.connection.on('disconncect', function(data) {
    self.emit('disconnect');
  });
}

banana.js

var events = require('events');
var Banana = function(opts) {
  this.ipAddress = opts.ipAddress;
  this.port = opts.port;
};
Banana.prototype = new events.EventEmitter;
module.exports = Banana;
Banana.prototype.connect = function() {
  self = this;
  // telnet to banana
  var net = require('net');
  self.connection = net.createConnection(self.port, self.ipAddress);
  self.connection.setEncoding("UTF8");
  self.connection.on('connect', function(data) {
    self.emit('connect');
  });
  self.connection.on('disconncect', function(data) {
    self.emit('disconnect');
  });
}

如何避免名称冲突?

不要使用(隐式)全局变量

这是我的问题吗?

是的。这是你造成的,你需要解决它。

这个词合适吗?

是的!

如何修复?

不要重命名碰撞变量,而是使用var将其声明为本地变量。

如何预防?

对你所有的文件使用严格模式,你会得到一个异常在分配给未声明的全局变量