爲了簡化,我實際上有主頁面(/)和搜索頁面(/ search),並且在搜索頁面中,我想使用socket.io向用戶發送信息,因爲我只想發送信息到一個插座,我需要io.on('連接'...)。快遞內的socket.io事件
這是我的代碼,工作不正常。當我第一次去/搜索時,一切正常,但是,當我重新加載時,控制檯兩次記錄「Message#2」。
控制檯
First time
----------
Message #1
Message #2
Second time
----------
Message #1
Message #2
Message #1
Message #2
Message #2
server.js
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
app.set('view engine', 'ejs');
app.use(express.static("public"));
app.get('/', function(req, res) {
res.render('index');
});
app.get('/search', function(req, res) {
res.render('search');
console.log('Message #1');
io.on('connection', function(socket) {
console.log('Message #2'); // Here's the problem
getSearch('something', function (err, data) {
if (err) {
console.log("ERROR : ", err);
} else {
socket.emit('fetchSearch', data);
}
});
});
});
server.listen('3000');
搜索
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="../favicon.png" rel="shortcut icon" type="image/x-icon">
<title>Title</title>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
</head>
<body>
<script>
var socket = io();
socket.on('fetchSearch', function(rows){
// Rows is an array
});
</script>
</body>
</html>
關於正在發生的事情或如何解決它的任何想法?
好吧,讓我們看看。事件處理程序運行一次,然後兩次,然後三次,所以...您必須多次將事件處理程序綁定到事件。您的代碼似乎證實,每次調用/ search都會向連接事件添加另一個處理程序。 –
你的意思是,如果你導航到/搜索,你會看到'Message#1'和'Message#2',但是如果刷新你只能看到'Message#2'? – pay
我該如何改變才能工作? PD:我編輯了控制檯日誌 – bernatixer