【发布时间】:2017-09-11 12:02:00
【问题描述】:
好的。所以我试图实现在我所有的快速路线中获取 socket.io。
我的代码的一部分:
var port = process.env.PORT || 3000; // set our port
var server = app.listen(port);
var io = require('socket.io')(server);
app.io = io;
exports.io = io;
然后我在其他文件中按如下方式调用它。
var app = require('../../server');
var io = app.io;
function hijack(user,boatid) {
console.log("????");
console.log(user);
app.io.sockets.emit("myevent",{ test: 22});
var userid = user._id;
console.log(user);
}
module.exports = {
hijack : hijack(app),
};
但是,现在劫持函数中的用户参数似乎被应用程序占用了,并且,如果我添加了一个额外的参数,它仍然不知道用户参数,因为我在主文件中通过以下方式调用:
var ships_model = require('./app/gamemodels/ship_model.js');
ships_model.hijack(req.user, req.body.id).then(function (result) {
res.json(result);
});
请注意:我尝试像下面这样注入 IO:
var ships_model = require('./app/gamemodels/ship_model.js')(io);
但这只会产生错误。
另一个例子:
是否可以在某些函数中进行套接字发出调用?我只对向客户端发送数据感兴趣。
或者推送服务器端是如何工作的,这也可以用套接字来完成吗?
客户端请求如下服务器端
var bankfactory = require(path.resolve('./modules/articles/server/factory/user_factory.js'));
app.post('/api/bank', function (req, res) {
bankfactory.bank_inn(req.user._id,amount).then( function (bankresult) {
res.json(bankresult);
});
});
银行工厂:
exports.bank_inn = bank_inn;
function bank_inn(playerid,amount) {
if (playerid == 1) {
} else {
// possible to make a emit call to the client here?
//emit("newevent,datahere)
}
}
注意二:我已经研究了事件发射器,但没有结果。
那么,我怎样才能在我的快速路由中调用 socket.emit?
附加结构代码:
主文件:
var ships_model = require('./app/gamemodels/ship_model.js');
ships_model.createShipInterface(req.user._id).then(function (response) {
res.json(response);
});
ship_model 文件具有以下结构:
module.exports = {
getShips: getShips(),
createShipInterface : createShipInterface,
allowedLocationsShips : allowedLocationsShips,
startMissionInterface : startMissionInterface,
deligateShipMovements: deligateShipMovements,
upgradeBoat : upgradeBoat,
deletedBoats: deletedBoats,
hijackSession : hijackSession,
boats_to_hijack : boats_to_hijack,
avaliable_boats : avaliable_boats,
createHijackSession : createHijackSession,
public_hijack : public_hijack,
joinHijackSession : joinHijackSession,
leavehijack : leavehijack,
sendMessageToMembers : sendMessageToMembers,
KickMember : KickMember,
togglePublic : togglePublic,
getHangar : getHangar,
hijack : hijack(app),
getHangarSession: getHangarSession,
updateUserLocation : updateUserLocation,
};
【问题讨论】:
-
你需要将socket连接建立单独分开,现在很多代码都在同一个文件JSbin
标签: javascript node.js sockets express socket.io