2014-01-03 3 views
1

Я пишу чат-приложение. Во-первых, я загрузил свои взгляды через Ajax, но потом понял, что это не обязательно, потому что я могу использовать экспорт в express insted. Я думаю, что это лучшее решение, но теперь я не знаю, как передать переменную из моей формы входа в script.js. Передача имени пользователя (username = req.body.user;) в комнатах.js на server.js работает, потому что у меня есть собственное имя в консоли, которое я ввел в текстовый ввод, но когда я испускаю 'test' для script.js, ничего не происходит, я В моей консоли браузера ничего нет. Я полагаю, что сообщение в консоли появляется на мгновение, а затем новое представление загружается, и оно исчезает. Я попытался изменить порядок кода, но не помог. Любые предложения? Я делаю что-то неправильно ? Я только начинаю изучать узел и выражать, поэтому буду благодарен за любую помощь.express.js, передающие переменные после загрузки изображения

server.js

var express = require('express') 
       , routes = require('./routes') 
       , music = require('./routes/music') 
       , art = require('./routes/art') 
       , rooms = require('./routes/rooms') 
       , http = require('http') 
       , app = express() 
       , server = http.createServer(app) 
       , io = require('socket.io').listen(server) 
       , path = require('path') 
       , jade = require('jade') 
       , mysql = require('mysql'); 

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

     app.get('/', routes.index); 
     app.get('/music', music.rooms); 
     app.get('/art', art.rooms); 
     app.post('/rooms', rooms.rooms); 

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

      socket.on('joinRoom', function(data) { 
       socket.username = username; 
       socket.room = data.room; 
console.log('socket room and username in console' + socket.room+socket.username); 
       socket.join(socket.room); 
       socket.emit('test'); 
     }); 

     server.listen(3000); 

script.js

var socket = io.connect(); 

$(document).ready(function() { 

    $('#rooms').on('click', 'a', function() { 
     var room = $(this).data('id');  
     socket.emit('joinRoom', {room: room}); 
}); 
     socket.on('test', function(){ 
      console.log('check if it works'); 
     }); 
    }); 

index.jade

include header.jade 

    div#page  
     div(class="box") 
       form(name="input", action='rooms', method="post") 
        div 
        p 
         | Login: 
         input(type="text", name="user", class="user") 
        input(type="submit",class="submit",value="Login") 

rooms.jade

include header.jade 

    div#page 
     div(class="box")  

      div#rooms 
       h2 Rooms 
       a(data-name='abrakadabra', data-id='1', href='music') Abrakadabra 
       a(data-name='aloha', data-id='2', href='art') Aloha 

rooms.js в маршрутах папку

exports.rooms = function(req, res){ 
res.render('rooms', { title: 'Rooms' }); 
    username = req.body.user; 

}; 

music.js (одна из комнаты)

exports.rooms = function(req, res){ 
    res.render('music', { title: 'Music room' }); 

}; 
+0

Где вы отправляли сообщение "joinRoom" на сервер? – Krasimir

+0

@ Krasimir right, я обновил это (ранее, прежде чем вставить мой код здесь, я сделал небольшой заказ) – elevenMinutes

+0

Не могли бы вы попытаться прокомментировать 'socket.join (socket.room);'. Есть ли метод соединения на самом деле. – Krasimir

ответ

0

Добавить event.preventDefault() в вашей функции номер кнопки мыши. Эти ссылки обновляют страницу, они не должны.

var socket = io.connect(); 

$(document).ready(function() { 

    $('#rooms').on('click', 'a', function() { 
    event.preventDefault(); 
    var room = $(this).data('id');  
    socket.emit('joinRoom', {room: room}); 
    }); 

    socket.on('test', function(){ 
    console.log('check if it works'); 
    }); 

}); 
Смежные вопросы