2012-12-10 19 views
6

İsterim app.js için:POST verileri

  • giriş formlarından girilen verileri almak.
  • socket.io yoluyla veri göndermek ve
  • ekspres app.js üzerinde veri almak yapılır
  • mongoose kullanarak bir mongodb veritabanına veri eklemek diyerek konsolu günlüğü gönderin.

Ben mesajlar yayarlar anlıyorum ama aracılığıyla veri göndermek nasıl emin değildi.

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

}); 

benim index.ejs dosyası::

<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

Bu biraz karışık görünüyor. Neden data throuch soketini almak istiyorsun ve o zaman ekspres üzerinden "yönlendir"? Bunun bir seçim yapmak akıllıca olur: ya sadece formu göndermek (ve belki de geri yuva üzerinden bir bildirim gönderme) veya devam etmek soket üzerinden veri gönderme. –

cevap

10

You my app.js böyle kurulur

şimdiden teşekkür ederim POST a gerek yok uzun boylu.

ben istemci tarafında yapacağını:

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

Ve sunucu tarafında

:

//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

Teşekkürler! bir şey daha, yanıt olarak, bu döndürür: benim kötü Ah evet – ashley

+1

"gönderildikten sonra başlıkları ayarlanamaz". Cevabımı düzenledim. Verileri, express ('res.json (...)') yerine socket.io aracılığıyla göndermeniz gerekir. Socket.emit ('callback' ...) 'içine' data: data 'ekledim. Ardından verileri istemci tarafında yazdırmanız gerekir. – maxdec

+0

Çok teşekkür ederim adamım :). takdir. – ashley