Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js/socket.io,刷新或新建套接字连接时广播_Node.js_Sockets - Fatal编程技术网

Node.js/socket.io,刷新或新建套接字连接时广播

Node.js/socket.io,刷新或新建套接字连接时广播,node.js,sockets,Node.js,Sockets,我尝试使用node.js和socket.io构建一个实时Todolist。 我的应用程序几乎可以正常工作,但存在一个问题: 当新用户(套接字)建立连接或刷新页面时,内存中的任务(newtodo)将广播给所有用户。 我想我必须为执行广播命令实现一个条件,但是我被阻止了。 你能帮我吗 APP.JS var app = require('express')(), server = require('http').createServer(app), io = require('sock

我尝试使用node.js和socket.io构建一个实时Todolist。 我的应用程序几乎可以正常工作,但存在一个问题: 当新用户(套接字)建立连接或刷新页面时,内存中的任务(newtodo)将广播给所有用户。 我想我必须为执行广播命令实现一个条件,但是我被阻止了。 你能帮我吗

APP.JS

var app = require('express')(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server),
    cookieParser = require('cookie-parser'),
    session = require('cookie-session'),
    bodyParser = require('body-parser'),
    todoliste = [], // stocke la todolist
    newtodo ='',
    ent = require('ent'), // Permet de bloquer les caractères HTML (sécurité équivalente à htmlentities en PHP)
    fs = require('fs');

/* On utilise les cookies, les sessions et les formulaires */
app.use(cookieParser())
.use(session({secret: 'todotopsecret'}))
.use(bodyParser())
// S'il n'y a pas de todolist dans la session,
//on en crée une vide sous forme d'array avant la suite et
//permet de récuperer la liste
.use(function(req, res, next){
    if (todoliste.length != 0) {
        req.session.todolist = [];
        req.session.todolist = todoliste;
    }else{
        req.session.todolist = [];
    }
    next();
})

/* On affiche la todolist et le formulaire */
.get('/todo', function(req, res) {    

    res.render('todo.ejs', {todolist: todoliste,newtodo : newtodo});

})

/* On ajoute un élément à la todolist et le stoche dans newtodo*/
.post('/todo/ajouter/', function(req, res) {
    if (req.body.newtodo != '') {
        //req.session.todolist.push(req.body.newtodo);
        newtodo = req.body.newtodo;
        todoliste.push(newtodo);
        //req.body.newtodo = '';

    }
    res.redirect('/todo');
})

/* Supprime un élément de la todolist */
.get('/todo/supprimer/:id', function(req, res) {
    if (req.params.id != '') {
        req.session.todolist.splice(req.params.id, 1);
    }
    res.redirect('/todo');
})

/* On redirige vers la todolist si la page demandée n'est pas trouvée */
.use(function(req, res, next){
    res.redirect('/todo');
});


server.listen(8080);
/*on lance l'écoute sur la connexion d'un nouvel utilisateur*/
 io.sockets.on('connection', function (socket) {
                    console.log('client connecte');
                    // on envoie la tache à tout le mmonde

                       socket.broadcast.emit('newtodo',newtodo);

                });
INDEX.EJS

<!DOCTYPE html>

<html>
    <head>
        <title>Ma todolist</title>
        <style>
            a {text-decoration: none; color: black;}
        </style>
    </head>

    <body>
        <h1 id="h1">Ma todolist</h1>

        <ul id="ul">

        <% todolist.forEach(function(todo, index) { %>
            <li><a href="/todo/supprimer/<%= index %>">✘</a> <%= todo %></li>

        <% }); %>
        </ul>


        <div >

        </div>

        <form action="/todo/ajouter/" method="post" id="form">
            <p>
                <label for="newtodo">Que dois-je faire ?</label>
                <input type="text" name="newtodo" id="newtodo" autofocus />
                <input type="submit" id="submit" />
            </p>
        </form>

        <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
        <script src="/socket.io/socket.io.js"></script>
        <script>


            // Connexion à socket.io
            var socket = io.connect('http://localhost:8080');




                socket.on('newtodo', function(newtodo) {

                    if (newtodo != '') {
                        $('#ul').append('<li><a href="/todo/supprimer/">✘</a>'+ newtodo + '</li>');
                    }

                }); // Transmet le message aux autres



        </script>
    </body>
</html>

托多利斯特夫人
a{文本装饰:无;颜色:黑色;}
托多利斯特夫人
我是公平的吗?

//连接插座.io var socket=io.connect('http://localhost:8080'); socket.on('newtodo',函数(newtodo){ 如果(newtodo!=''){ $('ul')。追加('li>'+newtodo+''); } }); // 传输信息辅助autres
现在,它是英文的,对不起!谢谢!谢谢你改变了语言。