事件开启。(“事件”...。从未触发,为什么?

时间:2019-09-23 13:19:24

标签: node.js socket.io

我正在使用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>

1 个答案:

答案 0 :(得分:1)

连接到“ http://localhost:8080/shared/”而不是“ http://localhost:8080”是连接到名为shared的特定socket.io名称空间。因此,您的事件将仅在服务器上显示给该名称空间。因此,除非您在该名称空间的服务器上注册事件处理程序,或者从连接URL中删除/shared,否则您将看不到事件。