我有一个包含两条路线的简单快递js。一个用于获取html页面,另一个用于发送网络套接字消息
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var app = express();
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456'
});
router.get('/', function(req, res){
res.sendFile('/express/one/index.html');
});
router.get('/get_me', function(req, res){
res.send('GET route on things.');
io.on('connection', function (socket) {
socket.emit('trial',Math.random());
});
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456'
});
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
});
router.post('/post_me/:one/:two', function(req, res){
res.send('POST route on things.' + req.params.one + req.params.two +'.');
});
router.get('/hello/:name', function(req, res) {
res.send('hello ' + req.params.name + '!');
});
router.get('/hello/:first/:second/:third', function(req, res) {
res.send('hello ' + req.params.first + req.params.second + req.params.third + '!');
});
app.use('/', router);
var server = app.listen(3000);
var io = require('socket.io').listen(server);
在客户端,我有这个
var socket = io('http://localhost:3000');
socket.on('trial', function (data) {
alert(data);
});
我希望在执行get_me
时在客户端获得一个随机数而不会刷新
情况并非如此。我只在执行get_me
并刷新index.html
页面时才得到随机数。
socket io应该是这样工作的吗(在设置的时间间隔后刷新html页面以获取消息)?
我来自脚协议的背景,事实并非如此。
答案 0 :(得分:0)
问题是,仅在达到'/get_me'
路由后 初始化套接字。
解决方案:只需将io.on('connection' .... )
放在路由之外,就在应用程序的根目录下,即可在启动时(而不是在到达路由之后)初始化套接字。