我正在使用socket.io做协作任务,因为我使用事件。
在我的服务器server.js中,我有:
io.sockets.on('connection', function (socket) {
console.log("socketon");
socket.on('task', function(task){
console.log("another task");
task=ent.encode(task);
socket.broadcast.emit('task', {task : task});
})
});
在我看来,我已经共享了。ejs我有:
var socket = io.connect('http://localhost:8080/shared/');
socket.on('task', function (data) {
printtask(data.task);
})
$('#addtask').submit(function () {
let task = $('#task').val();
socket.emit('task', task);
printtask(task);
$('#task').val('').focus();
return false;
});
function printtask(task) {
$('#todolistlist').prepend("<li> <a class='text-danger' href='#'>✘</a>" + task + '</li>');
}
当我进入控制台“ socketon”中的页面http://localhost:8080/shared/时,套接字已安装并且可以正常工作,但是当我单击提交时,控制台中没有“另一项任务”。
我不知道为什么我的事件“任务”没有被触发。
如果有人有主意,我会很高兴:)
PS:如果出现负号,请告诉我原因,以便升级我的帖子
编辑:
这是在server.js中传递的要求:
var express = require('express');
var app = express();
let server = require('http').createServer(app);
let ent = require('ent');
var session = require('cookie-session');
var bodyParser = require('body-parser');
let io = require('socket.io').listen(server);
var encodedUrl = bodyParser.urlencoded({ extended: false });
这里是不同的get(在/ shared中使用了我的套接字):
.get('/', function(req, res) {
res.render('index.ejs');
})
.get('/private/', function(req, res) {
res.render('todolist.ejs', {todolist: req.session.todolist});
})
.post('/private/add/', encodedUrl, function(req, res) {
if (req.body.addtodo !=''){
req.session.todolist.push(req.body.addtodo);
}
res.redirect('/private/');
})
.get('/private/delete/:index', function(req, res) {
if (req.param.index != '') {
req.session.todolist.splice(req.params.index, 1);
}
res.redirect('/private/');
})
.get('/shared/', function (req, res) {
res.render('shared.ejs');
})
.use(function(req, res, next){
res.redirect('/')
});
这是我的shared.ejs的html内容
<div class='container'>
<div class= row>
<ul id="todolistlist" class="offset-lg-2 col-lg-8 list-group list-group-flush">
</ul>
<section class="offset-lg-1 col-lg-1">
<p>connected:</p>
<ul id="todolistmembers" class="list-group list-group-flush">
</ul>
</section>
</div>
<form id='addtask' method='post' class="form-inline offset-lg-2 mb-3 col-lg-8 align-items-center">
<div class="input-group w-100" >
<div class="input-group-prepend">
<label id="basic-addon3" class="input-group-text" for="addtodo">What to do ?</label>
</div>
<input type="text" id="task" class="form-control" style="text-align:right" name="addtodo" id="addtodo" autofocus />
<span class="input-group-append">
<input type="submit" class="btn btn-primary" value="add"/>
</span>
</div>
</form>
</div>
<script src="/js/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/js/bootstrap.min.js"></script>
答案 0 :(得分:1)
连接到“ http://localhost:8080/shared/”而不是“ http://localhost:8080”是连接到名为shared
的特定socket.io名称空间。因此,您的事件将仅在服务器上显示给该名称空间。因此,除非您在该名称空间的服务器上注册事件处理程序,或者从连接URL中删除/shared
,否则您将看不到事件。