2012-12-10 17 views
6

मैं करना चाहते हैं:पोस्ट डेटा app.js को

  • इनपुट रूपों से दर्ज किया गया डेटा पुनः प्राप्त।
  • socket.io के माध्यम से डेटा भेजने और कंसोल लॉग कह किया
  • एक्सप्रेस app.js पर डेटा प्राप्त
  • नेवला का उपयोग कर एक MongoDB डेटाबेस में डेटा सम्मिलित भेजें।

मैं उत्सर्जित संदेशों को समझता हूं लेकिन यह सुनिश्चित नहीं करता कि डेटा कैसे पोस्ट किया जाए।

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

}); 

+1

यह थोड़ा भ्रमित लगती है। आप डेटा throuch socket.io प्राप्त करना चाहते हैं और फिर एक्सप्रेस के माध्यम से इसे "मार्ग" क्यों प्राप्त करना चाहते हैं? मुझे लगता है कि एक विकल्प बनाना बुद्धिमान होगा: या तो फॉर्म को पोस्ट करें (और शायद सॉकेट के माध्यम से एक अधिसूचना वापस भेजें) या सॉकेट पर डेटा को जारी रखने के लिए भेजें। –

उत्तर

10

आप अग्रिम

मेरी app.js इस तरह की स्थापना की है में धन्यवाद 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}); 
    }); 
}); 
+0

धन्यवाद! प्रतिक्रिया में एक और बात, यह लौटती है: "वे भेजे जाने के बाद हेडर सेट नहीं कर सकते" – ashley

+1

ओह हाँ मेरा बुरा। मैंने अपना जवाब संपादित किया। आपको एक्सप्रेस के बजाय socket.io के माध्यम से डेटा वापस भेजने की आवश्यकता है ('res.json (...)')। मैंने 'socket.emit' ('कॉलबैक' ...) में 'डेटा: डेटा' जोड़ा। फिर आपको क्लाइंट पक्ष पर डेटा प्रिंट करने की आवश्यकता है। – maxdec

+0

आपको बहुत बहुत धन्यवाद :)। की सराहना की। – ashley