我正在使用套接字,需要从我的套接字中间件文件中调用外部函数。
我有以下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)
,但仍然出现错误。
是否可以调用此外部函数?
答案 0 :(得分:0)
你有点混乱。
请阅读有关快递routing和SOLID(尤其是单一责任原则)的更多信息。
从逻辑上讲,最好将套接字的代码删除到单独的文件中,以免使快速路由混乱。
您的快递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