簡體   English   中英

TypeError: require(...).listen 不是 function 錯誤

[英]TypeError: require(…).listen is not a function ERROR

我正在嘗試執行 a.js 文件並給我以下錯誤

錯誤

顯然給我帶來問題的代碼是

var io = require('socket.io').listen(app);

有人能說出問題所在嗎? 我對 Javascript 和 Node.js 的經驗很少:/

這整個事情有點令人困惑,因為 socket.io 支持各種初始化它的方式,並且根據您是要連接到現有的 http(s) 服務器還是讓它創建自己的服務器,會有一些變化。

如果您只想要一個 socket.io 服務器本身,您可以這樣做:

const io = require('socket.io')();

這使用 socket.io Server工廠 function 並傳遞默認選項(假定端口 80)。


如果你想要一個 http 服務器,你可以同時使用 Express 和 socket.io,你可以這樣做:

// create http server and start it
const app = require('express')();
const server = app.listen();

// create socket.io server and bind it to an existing http server
const io = require('socket.io')(server);

或這個:

// create Express listener instance
const app = require('express')();

// create http server and bind the Express listener instance to it
const server = http.createServer(app);

// create socket.io server and bind it to the existing http server
const io = require('socket.io')(server);

// start the http server
server.listen();

這兩個都使用 socket.io Server工廠 function 並將其傳遞給現有的 http 服務器 ZA8CFDE6331BD49EB2ACZ66B8 將共享它。

或者(這種語法不經常使用),如果您想更刻意地自己創建一個獨立的 socket.io 服務器實例:

// Load socket.io Server class from socket.io module
const { Server } = require("socket.io");

// create socket.io server instance
const io = new Server();

// start socket.io server
io.listen();

您的代碼無法正常工作有幾個原因:

  1. require('socket.io')返回一個沒有.listen()方法的Server工廠 function。 您需要一個服務器實例來獲取.listen()方法。
  2. 您不會將app傳遞給 socket.io 實例。 當您使用http.createServer()創建該服務器時,您將app傳遞給 http 服務器實例,或者您使用app.listen()自動將它們掛鈎在一起,它會為您創建.listen()方法。

僅供參考,socket.io Server實例上的 socket.io .listen()方法可以接受端口號(如果未通過,則默認為 80),或者它可以接受現有的、已創建的 Z80791B3AE7002FAACB88C24688876 服務器實例。 Server class 工廠 function 這是require('socket.io')返回的內容,也將接受這兩種類型的 arguments,如上圖所示。


僅供參考,我假設您使用的是 Express,因為您使用了app變量。 如果不是這種情況,那么請顯示代碼的 rest,以顯示app是什么以及它來自哪里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM