将数据POSTED发送到nodejs服务器到客户端

时间:2016-05-10 18:15:54

标签: javascript html node.js sockets socket.io

我有以下nodejs服务器代码

    http = require('http');
    fs = require('fs');
    url = require('url');
    server = http.createServer( function(req, res) {

        console.dir(req.param);

        if (req.method == 'POST') {
            console.log("POST");
// I WANT TO EMIT THIS DATA TO CLIENT
        }
        else
        {
            console.log("GET");
        }

    });

//THIS IS A WORKING EXAMPLE WHICH I FOUND ONLINE TIED TOGETHER

    io = require('/usr/local/lib/node_modules/socket.io').listen(server);

    io.sockets.on( 'connection', function ( socket ) {
      console.log("runing time");
      sendTimeMessage(socket);
    });


    function sendTimeMessage(socket){
      console.log("in time");
      var now= new Date().getTime();
      socket.emit('notification', {'message': now});
      setTimeout(function() {
        socket.emit('notification', {'message': "after 5s"});
      },5000);
    }

    port = 8000;
    host = '127.0.0.1';
    server.listen(port, host);
    console.log('Listening at http://' + host + ':' + port);

客户端

<!doctype html>
<html>
    <head>
        <script src="http://127.0.0.1:8000/socket.io/socket.io.js"></script>
        <script>

        var socket = io.connect('http://localhost:8000');

        socket.on('notification', function (data) {
            console.log(data);
        });
        </script>
    </head>
    <body>
        <ul id='messages'></ul>
    </body>
</html>

请原谅这个例子。我想要实现的是,当我的nodejs服务器发生帖子时,我想将它发送到前端。我是nodejs和socket的新手,但我知道javascript是如何工作的。

有没有办法让socketio在POST中发出?

1 个答案:

答案 0 :(得分:0)

如果要将数据发送到使用套接字的服务器,请通过套接字发送数据,而不是通过发布请求进行发送。或者,如果您必须使用帖子,您可以通过res.send将其发送回客户端(&#39;数据在这里&#39;);

如果这些选项都不适合你,那么也许你可以设置某种中间选项。例如,将post请求中的数据记录到数据库,并有一个脚本轮询数据库中的更改,然后将它们推送到套接字。这很hacky,绝对不是推荐的做法。

编辑:另一种方法可能是创建一个全局变量(yuck),这是一个以某种ID作为键的套接字列表。然后使用您的发布请求发送该ID,并从您的全局变量中获取套接字并从那里发送数据。例如:

var sockets = {};
var server = http.createServer( function(req, res) {
    if (req.method == 'POST') {
        // You will need to pass the socket ID from the client
        sockets[request.data.id].emit('Some data');
    }
});

var io = require('/usr/local/lib/node_modules/socket.io').listen(server);

io.sockets.on( 'connection', function ( socket ) {
  sockets[socket.id] = socket;
});

这是未经测试的,并且不保证没有安全漏洞