Вызов внешней функции из socket.on () - PullRequest
0 голосов
/ 09 января 2019

Я использую сокеты и мне нужно вызвать внешнюю функцию из моего файла промежуточного программного обеспечения сокета.

У меня есть следующий файл rout.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);
  });
};

Я пытаюсь вызвать метод logBasketID из моего файла промежуточного программного обеспечения sockets.io при получении сообщения от клиента. Мой файл 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 голосов
/ 09 января 2019

Ты немного напутал.
Пожалуйста, прочитайте больше о экспресс маршрутизации и о SOLID (особенно принцип единой ответственности).

Логически было бы лучше удалить код для сокета в отдельный файл, чтобы не связывать его с экспресс-маршрутами.

Ваш экспресс app.js (или любой другой файл, с которого запускается ваш сервер) должен содержать импорт файла маршрута, а затем использовать его в коде, подобном следующему:

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...