Nodejs: обмен данными между сервером и клиентом

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

Сервер.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');});

Поэтому в каталоге «public» я написал два следующих файла на стороне клиента:

комната.js

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

индекс.формат 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>

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

Почему этот простой объект не виден сервером?

1 ответ

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

    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');
    });
    

    С другой стороны, на стороне клиента входной id равен nicknamewhile you get the value by usernameid, поэтому вы также должны сделать это изменение:

    <input id="nickname"> к <input id="username">