我的REST調用和一些數據庫插入我想通過socket.io這樣發射到前端新的通知後:獲取socket.io命名空間從項目的任何地方
socket.broadcast.emit('send notification', notification);
由於我」功能這樣做是通過REST觸發的,而不是通過socket.io觸發的。我沒有變量'socket'。
我開始還以爲我可以得到「IO」像:
var io = require('socket.io') // or like: require('socket.io')(3000)
從這裏,我想我能得到這樣的命名空間:
var nsp = io.of('/notification-list');
nsp.on('connection', function (socket) { ... }
但IO似乎是不確定的(或如果我使用它的端口3000我得到EADDRINUSE,因爲顯然socket.io連接到127.0.0.1:3000
這可能是一個非常愚蠢的問題,但因爲我無法弄清楚m您擁有:我如何才能使socket
準備好用於此功能?任何幫助將非常感激!
編輯:
我試圖friend00的解決方案,但我仍然無法弄清楚如何做到這一點。
在我server.js
我創建服務器&匯入我socketIO這樣的東西:
var server =
http.createServer(app).listen(app.get('port'), function() {
});
require('./socketio_listener/socketIoListener')(server);
然後我socketIoListener.js
var sockio = require("socket.io");
var io;
function initIO(server) {
if (!server) { throw new Error("ERR"); }
if (!io) {
io = sockio.listen(server);
}
return io;
}
module.exports.getIO = function() {
if (!io) { throw new Error("ERR"); }
return io;
};
module.exports = function (server) {
io = initIO(server);
var nspNotification = io.of('/notification-list');
nspNotification.on('connection', function (socket) {
socket.on('get notificationList', function (data) {
notification.findNotifications(socket, data);
});
// ...
});
現在我在我想發出通過插座東西的功能嘗試。 io:
var io = require("socket.io").getIO();
我也嘗試:
var ioServer = require('../socketio_listener/socketIoListener');
ioServer.getIO();
但我仍然總是得到:
TypeError: undefined is not a function
SOLUTION
我找到了解決辦法,雖然我不明白爲什麼這是之前的一個問題:我將module.exports.getIO = function()
移到底部,現在它工作得很好。雖然我認爲在socketIoListener.js
內的位置並不重要,但它顯然沒有。
我試過你的解決方案並將其添加到主題中,但不幸的是它不適用於我。你能告訴我我做錯了什麼嗎?謝謝您的幫助! – Markus
@Markus - 你需要這個路徑到你自己的模塊:'var io = require(「你的模塊的路徑」)。getIO();'。我的答案有一個我現在修正的錯字。僅供參考,對於節點模塊來說,相對路徑非常棘手。因此,您需要確保所有模塊都能正確找到。另外,我想知道爲什麼你拿出有用的錯誤信息並用ERR代替它們。這不會告訴某人使用這些他們做錯了什麼或錯誤來自哪裏。 – jfriend00
我只是縮短了答覆,在我的代碼中我仍然有錯誤消息。 (io = require(「path to your module」))。 ioServer.getIO();'應該這樣做。至少這就是我通常從其他文件導入東西的方式。路徑是正確的,我只是雙重檢查它。還有什麼我可能會失蹤? – Markus