2016-12-26 3 views
0

Я разрабатываю серверное приложение в Node.js. Для лучшего понимания я написал очень легкий код, чтобы лучше указать мою проблему. Это на стороне сервера:Nodejs: обмен данными между сервером и клиентом

Server.js

var express = require('express'); 
var app = express(); 
var port = process.env.PORT || 80; 

var room = function(){ 
    this.users = {}; 
    this.counter = 0; 
} 

app.get('/reg',function(req,res){ 
    console.log(req.params); 
}); 

app.use('/recosh', express.static(__dirname + '/public/')); 
app.listen(port, function(){console.log('ReCoSh Server Starts...\n');}); 

Так внутри "общественной" директории, которую я написал два следующих на стороне клиента файлы:

room.js

var room = { 
    //notifica al server una nuova registrazione 
    register: function(data){ 
     $.getJSON('/reg',data); 
    } 
} 

index.html

<!doctype html> 
<html> 
    <head> 
     <script src="room.js"></script> 
     <script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
     <script> 
      var register = function() { 
       room.register({ 
        "username": $("#username").val(), 
       }); 
      } 
     </script> 
    </head> 
    <body> 
     <div id="step1"> 
      <input id="username"> 
      <button onclick="register()">register</button> 
     </div> 
    </body> 
</html> 

Проблема заключается в том, что, вставив имя пользователя и нажав на регистр, код console.log(req.params); на сервере просто напечатать {}. Кажется, объект пуст ... Если я попробую console.log(req.params["username"]), он напечатает undefined.

Почему этот простой объект не отображается сервером?

ответ

0

Прежде всего, вы должны немного изменить опечатку в коде в этом

room.prototype.addUser = function(username){ 
    if(username){ 
     this.users[username] = username; 
     this.counter++; 
    } 
} 

меняющегося this.user[username] к this.users[username]

Затем измените app.use('/register'.. на app.get('/register'.., но я бы рекомендовал использовать post метод, но давайте сделайте работу с небольшими изменениями, и помимо этого вы не вызываете функцию register внутри обратного вызова. Так что вы должны сделать что-то вроде этого:

app.get('/register',function(req,res){ 
    var data = { 
     username: req.params['username'] 
    } 
    room.addUser(data.username); 
    console.log('user added\n'); 
}); 

С другой стороны, в вашей клиентской стороне входной идентификатор равен nickname тогда вы получите значение по username идентификатору, так что вы должны сделать это изменение, а также:

<input id="nickname"> до <input id="username">

+0

Спасибо за ответ @Karlen. Что касается тега '', я использовал «nickname» как id, но в коде скрипта в '' я написал функцию 'register' таким образом' room.register ({"username": $ ("# nickname") .val()});} '. Однако я пробовал ваши предложения, но все еще не работал «пользователь добавил» не отображается ... – pittuzzo

+0

Я вижу, что вы приняли ответ. Надеюсь, вам удастся – Karlen

Смежные вопросы