2012-12-10 52 views
6

我想:POST數據到app.js

  • 檢索輸入表單中輸入的數據。
  • 通過socket.io發送的數據和發送控制檯日誌說做
  • 收到快遞app.js數據
  • 將數據插入到使用貓鼬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); 
    }); 

}); 

+1

這似乎有點困惑。你爲什麼要接收socket.io的數據然後通過express來「路由」它?我認爲做出選擇是明智的:或者只是發佈表單(並且可能通過套接字發送通知),或者通過套接字發送數據來堅持它。 –

回答

10

你不需要POST a高。

我會做在客戶端:

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而不是express('res.json(...)')發回數據。我在'socket.emit('callback'...)'中添加了'data:data'。然後你需要在客戶端打印數據。 – maxdec

+0

非常感謝你:)。讚賞。 – ashley