2012-12-10 8 views
6

Tôi muốn:dữ liệu POST qua socket.io để app.js

  • lấy dữ liệu nhập từ các hình thức đầu vào.
  • gửi dữ liệu thông qua socket.io và gửi console log nói làm
  • nhận được dữ liệu trên app.js nhanh
  • chèn dữ liệu vào một cơ sở dữ liệu MongoDB sử dụng cầy mangut.

Tôi hiểu thông báo phát ra nhưng không chắc chắn cách đăng dữ liệu. cảm ơn bạn trước

app.js của tôi được thiết lập như thế này:

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

}); 

tập tin index.ejs tôi:

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

}); 

+1

Điều này có vẻ một chút nhầm lẫn. Tại sao bạn muốn nhận dữ liệu socket.io và sau đó "route" nó thông qua express? Tôi nghĩ rằng nó sẽ là khôn ngoan để thực hiện một sự lựa chọn: hoặc chỉ cần đăng các hình thức (và có lẽ gửi một thông báo trở lại thông qua các ổ cắm) hoặc gửi dữ liệu trên các ổ cắm để tồn tại nó. –

Trả lời

10

Bạn không cần POST một cao.

tôi sẽ làm trên các mặt hàng:

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

Và ở phía máy chủ:

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

cảm ơn bạn! một điều nữa, đáp lại, nó trả về: "Không thể đặt tiêu đề sau khi chúng được gửi" – ashley

+1

Oh yeah xấu của tôi. Tôi đã chỉnh sửa câu trả lời của mình. Bạn cần gửi dữ liệu trở lại thông qua socket.io thay vì Express ('res.json (...)'). Tôi đã thêm 'dữ liệu: dữ liệu' trong' socket.emit ('callback' ...) '. Sau đó, bạn cần in dữ liệu ở phía máy khách. – maxdec

+0

Cảm ơn bạn rất nhiều người đàn ông :). đánh giá cao. – ashley