[英]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.