POST data through socket.io to app.js

express, mongodb, node.js, socket.io

Solution

You don't need `POST` at all.

I would do on the client side:

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...
});

And on the server side:

//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});
  });
});

Problem

I would like to: - retrieve data entered from input forms. - send the data through socket.io and send console log saying done - receive the data on express app.js - insert the data into a mongodb database using mongoose. I understand emit messages but not sure how to post data through. thank you in advance my app.js is set up like this: ``` //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'}); }); }); ``` my index.ejs file: ``` <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); }); }); ```

Original source