从socket.on()中调用外部函数

时间:2019-01-09 11:39:43

标签: node.js express socket.io

我正在使用套接字,需要从我的套接字中间件文件中调用外部函数。

我有以下route.js文件:

const express = require("express");
const baskets = {};

module.exports = function(app, socketio) {
  const logBasketID = basketID => {
    console.log("this works" + basketID);
  };

  const addToBasket = (basketID, fruit) => {
    var basket = baskets[basketID];
    basket.fruit.push({
      fruit
    });
    return basket;
  };

  app.post("/fruit/add", (req, res) => {
    const fruit = req.body.fruit;
    const basketID = req.body.basketID;
    addToBasket(basketId, fruit);
    res.status(200).send(basket);
  });
};

当我从客户端收到消息时,我试图从我的sockets.io中间件文件中调用logBasketID方法。 我的io文件如下所示:

initialize = function(io) {
  io.sockets.on("connection", socket => {
    console.log("user connected");

    socket.on("join", (roomId, callback) => {
      socket.join(gameId);
      console.log("user joined room: " + roomId);
    });

    socket.on("logBasketID", (basketId, callback) => {
      console.log("user requested to remove fruit: " + basketId);
      //here I want to call a function from fruitRoutes.js like
      // logBasketID(basketId)
    });

    socket.on("disconnect", () => {
      console.log("user disconnected");
    });
  });
};

module.exports = {
  initialize
};

我尝试使用以下命令在套接字文件中要求路由文件:

var Routes= require("../routes/fruitRoutes")

然后调用Routes.logBasketID(basketID),但仍然出现错误。

是否可以调用此外部函数?

1 个答案:

答案 0 :(得分:0)

你有点混乱。
请阅读有关快递routingSOLID(尤其是单一责任原则)的更多信息。

从逻辑上讲,最好将套接字的代码删除到单独的文件中,以免使快速路由混乱。

您的快递const mainRoutes = require('/path/to/routes/file'); const express = require('express); const app = express(); mainRoutes(app); (或服务器启动的任何其他文件)应包含路由文件的导入,然后在如下代码中使用它:

// socket-methods.js
const logBasketID = basketID => { console.log("this works" + basketID) };

module.exports = { logBasketID }

带有套接字方法的文件应该分开:

initialize

然后,在const { logBasketID } = require('/path/to/socket-methods.js'); 文件中:

.sync