我正在开发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
。
为什么服务器看不到这个简单的对象?
答案 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">