簡體   English   中英

將消息發送到房間socket.io node.js

[英]Sending message to rooms socket.io node.js

我正在嘗試在node.js中構建我的第一個應用程序 - 聊天。 我有一個問題,發送消息到相應的房間。 socket.room沒有存儲,我想這是因為我嘗試每次都通過刷新頁面加載視圖,而不是通過Ajax。 這段代碼可以嗎?

server.js

  var express = require('express')
        , http = require('http')
        , app = express()
        , server = http.createServer(app)
        , io = require('socket.io').listen(server)
        , path = require('path')
        , jade = require('jade');

app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set("view options", {layout: false});
app.configure(function() {
    app.use(express.static(__dirname + '/public'));
});

app.get('/', function(req, res) {
    res.render('home.jade');
});

app.get("/rooms", function(req, res) {
    res.render('rooms.jade');
});
app.get("/music", function(req, res) {
    res.render('music.jade');
});
app.get("/art", function(req, res) {
    res.render('art.jade');
});


io.sockets.on('connection', function(socket) {

    socket.on('joinRoom', function(data) {
        console.log(data + ' joined');
        socket.room = data;
        socket.join(data);


    });

    socket.on('message', function(data) {

        io.sockets.in(socket.room).emit('sendMess', data.message);
    })


});


server.listen(3000);

client.js

    var socket = io.connect();

    $(document).ready(function() {

        $('.submit').on('click', function(e) {
            e.preventDefault();
            var user = $('.user').val();

            $.ajax({
                url: 'rooms'

            }).done(function(data) {
                $('body').html(data);
                console.log(user);
            })

        })

        $('#rooms').on('click', 'a', function() {

            var $this = $(this),
                    room = $this.data('name');
            joinRoom(room);

        });


        $('#conversation').find('.send').on('click', function() {
            var txt = $(this).prev('.message').val();
            console.log(txt);
            socket.emit('message', {message: txt});
        })


        socket.on('sendMess', function(data) {

            $('<p>' + data + '</p>').insertAfter($('#conversation'));


        })


    })




function joinRoom(data) {
    socket.emit('joinRoom', data);

}

home.jade

include header.jade
body
      div.container
         header
            h1 A Chat application 
            form(name="input", action="", method="post")
                | Username:
                input(type="text", name="user", class="user")
                input(type="submit", value="Login", class="submit")

rooms.jade

include header.jade
body
      div.container
         header
            h1 ROMS

         div#rooms
            h2 Join to room
            a(data-name='music', href='music') Music
            a(data-name='art', href='art') Art

音樂/ art.jade

include header.jade
body
      div.container
         header
            h1 MUSIC ROOM

         div#rooms
            h2 Join to room
            a(data-name='music', href='music') Music
            a(data-name='art', href='art') Art


         div#conversation
            input(type="text", name="message", class="message")
            button(class="send") Send

設置socket.room不會使它持久化,你必須自己存儲它(例如:在數據庫中)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM