Javascript ipcMain事件处理程序中的Electron TypeError

Javascript ipcMain事件处理程序中的Electron TypeError,javascript,node.js,electron,Javascript,Node.js,Electron,我对一件奇怪的事情有点困惑。我希望我能得到一些关于这种行为的解释 这是我的小学习计划。一个简单的tcp客户端服务器聊天程序。客户端是以电子方式编写的,但尚未运行 我的聊天模块是: 'use strict'; let Socket = require('net').Socket; let EventEmitter = require('events'); let util = require('util'); function Chat() { EventEmi

我对一件奇怪的事情有点困惑。我希望我能得到一些关于这种行为的解释

这是我的小学习计划。一个简单的tcp客户端服务器聊天程序。客户端是以电子方式编写的,但尚未运行

我的聊天模块是:

'use strict';

let Socket       = require('net').Socket;
let EventEmitter = require('events');
let util         = require('util');

function Chat() {
  EventEmitter.call(this);

  this.socket = new Socket({
    allowHalfOpen:true
  });

  this.socket.on('data', (data) => {
    let message = JSON.parse(data);
    if (message.isServer) {
      this.emit('server', message);
    } else {
      this.emit('message', message);
    }
  });

  this.socket.on('error', (err) => {
    this.socket.destroy();
    this.emit('error', err);
  });
};

Chat.prototype.join = function(port, host, user) {
  this.user = user;
  this.socket.connect(port, host, () => {
    this.emit('connected');
  });
}

Chat.prototype.send = function(msg, cb) {
  let message = JSON.stringify({
    usr: this.user,
    msg: msg
  });
  this.socket.write(message, cb || null);
};

Chat.prototype.leave = function(cb) {
  this.socket.destroy();
  if (typeof cb === 'function') {
    cb();
  }
};

util.inherits(Chat, EventEmitter);

module.exports = Chat;
在electron main.js中,我试着这样使用:

const electron = require('electron');
const ipcMain  = require('electron').ipcMain;
const app = electron.app;  // Module to control application life.
const BrowserWindow = electron.BrowserWindow;  // Module to create native browser window.
const Chat = require('./lib/chat');

const DEFAULT_PORT = **;
const DEFAULT_HOST = '**';

// Report crashes to our server.
electron.crashReporter.start();

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
var mainWindow = null;

var chat = new Chat();

// Quit when all windows are closed.
app.on('window-all-closed', function() {
  // On OS X it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform != 'darwin') {
    app.quit();
  }
});

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
app.on('ready', function() {
  // Create the browser window.
  mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.setMenu(null);
  mainWindow.loadURL('file://' + __dirname + '/index.html');

  ipcMain.on('start-connect', function(event, uname) {

    chat.join(**, '*****', uname);

    chat.on('connected', () => {
      event.sender.send('connected');
    });

    chat.on('server', message => {
      event.sender.send('server', message);
    });

    chat.on('message', (message) => {
      if (message.user === chat.user) {
        message.user = 'You';
      }
      event.sender.send('message', message);
    });

    ipcMain.on('submit', (event, msg) => {
      chat.send(msg);
    });
  });

  // Emitted when the window is closed.
  mainWindow.on('closed', function() {
    if (chat !== null) {
      chat = null;
    }
    mainWindow = null;
  });
});
从index.html发送start connect方法后,electron抛出错误:chat.join不是函数,我不知道为什么,因为事件处理程序是闭包,对吗


请帮助我:)

我面临一个特别的问题,当包括你所包括的ipcMain时


const ipcMain=require('electron').ipcMain当包含您所包含的ipcMain时,我面临一个特殊问题


const ipcMain=require('electron').ipcMain文档建议主进程使用
const{ipcMain}=require('electron')
,进入浏览器的javascript使用
const{ipcdrenderer}=require('electron')
。文档建议主进程使用
const{ipcdrenderer}=require('electron')
,并且
const{ipcdrenderer}=require('electron')
用于进入浏览器的javascript。