[英]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();
您的代碼無法正常工作有幾個原因:
require('socket.io')
返回一個沒有.listen()
方法的Server
工廠 function。 您需要一個服務器實例來獲取.listen()
方法。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.