應用程式結構
註冊事件處理常式
您將在下方找到兩個建議,說明如何註冊您的事件處理常式。
請注意,這些僅是建議,而非您必須遵循的嚴格準則。請自行調整為您喜歡的樣子!
每個檔案註冊其自己的事件處理常式
在此,入口點保持整齊,但事件監聽器可能較難發現(儘管強力的命名慣例/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
}
}