跳至主要內容
版本:4.x

應用程式結構

註冊事件處理常式

您將在下方找到兩個建議,說明如何註冊您的事件處理常式。

請注意,這些僅是建議,而非您必須遵循的嚴格準則。請自行調整為您喜歡的樣子!

每個檔案註冊其自己的事件處理常式

在此,入口點保持整齊,但事件監聽器可能較難發現(儘管強力的命名慣例/ctrl+f 會有所幫助)。

index.js

const httpServer = require("http").createServer();
const io = require("socket.io")(httpServer);

const registerOrderHandlers = require("./orderHandler");
const registerUserHandlers = require("./userHandler");

const onConnection = (socket) => {
registerOrderHandlers(io, socket);
registerUserHandlers(io, socket);
}

io.on("connection", onConnection);

orderHandler.js

module.exports = (io, socket) => {
const createOrder = (payload) => {
// ...
}

const readOrder = (orderId, callback) => {
// ...
}

socket.on("order:create", createOrder);
socket.on("order:read", readOrder);
}

所有事件處理常式都註冊在 index.js 檔案中

在此,每個事件名稱都位於同一個地方,這對於可發現性來說很好,但在中型/大型應用程式中可能會失控。

index.js

const httpServer = require("http").createServer();
const io = require("socket.io")(httpServer);

const { createOrder, readOrder } = require("./orderHandler")(io);
const { updatePassword } = require("./userHandler")(io);

const onConnection = (socket) => {
socket.on("order:create", createOrder);
socket.on("order:read", readOrder);

socket.on("user:update-password", updatePassword);
}

io.on("connection", onConnection);

orderHandler.js

module.exports = (io) => {
const createOrder = function (payload) {
const socket = this; // hence the 'function' above, as an arrow function will not work
// ...
};

const readOrder = function (orderId, callback) {
// ...
};

return {
createOrder,
readOrder
}
}