Nodejs:服务器和客户端之间的数据交换

时间:2016-12-26 13:52:01

标签: node.js express

我正在开发Node.js中的服务器应用程序。为了更好地理解,我写了一个非常简单的代码,以更好地指出我的问题。这是服务器端:

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

所以在" public"目录我写了两个以下客户端文件:

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

为什么服务器看不到这个简单的对象?

1 个答案:

答案 0 :(得分: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');
});

另一方面,在您的客户端,输入ID等于nickname,而您获得username id的值,因此您也应该进行此更改:

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