如何从 Node Js 服务器中的查询字符串中获取 id 或任何变量数据?
Posted
技术标签:
【中文标题】如何从 Node Js 服务器中的查询字符串中获取 id 或任何变量数据?【英文标题】:How to GET id or any variable data from Query String in Node Js Server? 【发布时间】:2013-11-16 02:16:13 【问题描述】:我已经设置了一个 Node Js 服务器。现在我正在从数据库中获取所有用户的记录。
现在,如果我想要特定 Id 的特定用户,我如何将其传递给 Node Js?
例如:我们在 PHP 中做:$_GET['id'];我想在 Node JS 中做同样的事情。
这是我的服务器代码:
var app = require('http').createServer(),
io = require('socket.io').listen(app),
fs = require('fs'),
mysql = require('mysql'),
connectionsArray = [],
connection = mysql.createConnection(
host : 'localhost',
user : 'root',
password : '',
database : 'test',
port : 3306
),
POLLING_INTERVAL = 1000,
pollingTimer;
// If there is an error connecting to the database
connection.connect(function(err)
// connected! (unless `err` is set)
console.log( err );
);
// creating the server ( localhost:8000 )
app.listen(8000);
/*
*
* HERE IT IS THE COOL PART
* This function loops on itself since there are sockets connected to the page
* sending the result of the database query after a constant interval
*
*/
var pollingLoop = function ()
// Doing the database query
var query = connection.query('SELECT * FROM users'),
users = []; // this array will contain the result of our db query
// setting the query listeners
query
.on('error', function(err)
// Handle error, and 'end' event will be emitted after this as well
console.log( err );
updateSockets( err );
)
.on('result', function( user )
// it fills our array looping on each user row inside the db
users.push( user );
)
.on('end',function()
// loop on itself only if there are sockets still connected
if(connectionsArray.length)
pollingTimer = setTimeout( pollingLoop, POLLING_INTERVAL );
updateSockets(users:users);
);
;
// creating a new websocket to keep the content updated without any AJAX request
io.sockets.on( 'connection', function ( socket )
console.log('Number of connections:' + connectionsArray.length);
// starting the loop only if at least there is one user connected
if (!connectionsArray.length)
pollingLoop();
socket.on('disconnect', function ()
var socketIndex = connectionsArray.indexOf( socket );
console.log('socket = ' + socketIndex + ' disconnected');
if (socketIndex >= 0)
connectionsArray.splice( socketIndex, 1 );
);
socket.on('ddd', function (name)
socket.username=name;
);
console.log( 'A new socket is connected!' );
connectionsArray.push( socket );
);
var updateSockets = function ( data )
// adding the time of the last update
data.time = new Date();
// sending new data to all the sockets connected
connectionsArray.forEach(function( tmpSocket )
tmpSocket.volatile.emit( 'notification' , data );
);
;
【问题讨论】:
您不必在这里重新发明***。您可以使用 express 服务器解析正文并为您提供查询字符串。 WebSockets 没有GET
或 POST
变量。要发送带有socket.io
的参数,您必须在数据Object
中发送带有它的事件.emit()
。
@JonathanLonowski 你能给我一个简单的例子吗?
【参考方案1】:
首先你必须为客户端嵌入socket.io javascript:
script(rel="text/javascript" src="/js/libraries/socket.io.min.js");
然后你像这样连接到你的套接字服务器:
var socket = io.connect("https://localhost:8080");
连接后,您可以触发事件:
button.on("click", function()
socket.emit("event-name", userId : 2 );
);
在服务器端你有相应的监听器:
socket.on("event-name", function(data)
console.log(data.userId); // logs: 2
var query = // ...
socket.emit("response", query);
);
再次在客户端,您检索响应:
socket.on("response", function(data)
console.log(data); // logs: the query
);
要确定哪个客户端应该接收发射,请参阅:
socket.io rooms or namespacing?
授权请看:
https://github.com/LearnBoost/socket.io/wiki/Authorizing
【讨论】:
以上是关于如何从 Node Js 服务器中的查询字符串中获取 id 或任何变量数据?的主要内容,如果未能解决你的问题,请参考以下文章
node.js 与 express 如何从 url 中删除查询字符串
如何从 iOS 应用程序中的 Node.js 服务器获取响应?
如何使用node js,reactjs,express从实际网页中的mongodb中获取数据