【问题标题】:POST data through socket.io to app.js通过 socket.io POST 数据到 app.js
【发布时间】:2012-11-27 23:15:52
【问题描述】:

我想:

  • 检索从输入表单输入的数据。
  • 通过 socket.io 发送数据并发送控制台日志说完成
  • 在 express app.js 上接收数据
  • 使用 mongoose 将数据插入 mongodb 数据库。

我了解发出消息,但不确定如何发布数据。提前谢谢你

我的 app.js 是这样设置的:

//app.js config ...

var socket = io.listen(server);

socket.on('connection', function(socket) {
   console.log('socket.io connected');
});



app.post('/go', function(req, res) {

  socket.on('data', function(data) {
    new Order({
      routeFrom : data.routeFrom,
      routeTo : data.routeTo,
      leaving: data.leaving
    }).save(function(err, docs) {
      if(err) { console.log("error"); }
      res.json(data);
    });
    socket.emit('callback', {done: 'Done'});
  });

});

我的 index.ejs 文件:

  <script src="/socket.io/socket.io.js"></script>

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

$('#send').on('click', function() {
    $.post('/go', {
       socket.emit('data', {
        routeFrom: $('#rf').val(),
        routeTo: $('#rt').val(),
        leaving: $('#l').val()
       });

    });

  socket.on('callback', function(data) {
   console.log(data);
  });

});

【问题讨论】:

  • 这似乎有点混乱。为什么要通过 socket.io 接收数据,然后通过 express “路由”它?我认为做出选择是明智的:要么只是发布表单(并且可能通过套接字发回通知),要么通过套接字发送数据以将其持久化。

标签: node.js mongodb express socket.io


【解决方案1】:

你根本不需要POST

我会在客户端做:

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

$('#send').on('click', function(event) {
  event.preventDefault();
  socket.emit('data', {
    routeFrom: $('#rf').val(),
    routeTo: $('#rt').val(),
    leaving: $('#l').val()
  });
});

socket.on('callback', function(data) {
  console.log(data.done);
  // Print the data.data somewhere...
});

在服务器端:

//app.js config ...
var socket = io.listen(server);

socket.on('connection', function(socket) {
  console.log('socket.io connected');
});

socket.on('data', function(data) {
  new Order({
    routeFrom : data.routeFrom,
    routeTo : data.routeTo,
    leaving: data.leaving
  }).save(function(err, docs) {
    if(err) { return console.log("error"); }
    socket.emit('callback', {done: 'Done', data: data});
  });
});

【讨论】:

  • 谢谢!还有一件事,作为响应,它返回:“发送后无法设置标头”
  • 哦,是的,我的错。我编辑了我的答案。您需要通过 socket.io 而不是 express (res.json(...)) 将数据发回。我在socket.emit('callback'...) 中添加了data: data。然后需要在客户端打印数据。
  • 没问题 :-) 很高兴我能帮上忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
相关资源
最近更新 更多