如何从 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 没有 GETPOST 变量。要发送带有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中获取数据

带有 Node Js 的 Mongodb

如何使用 Node.js 查询 mysql 数据库以通过 url 中的名称获取特定用户(字段),而不仅仅是通过 ID

如何从node.js中的二维数组中获取随机项[重复]