フロントエンド アプリとバックエンド アプリを備えた Node.js アプリケーションがあります。バックエンドはリストを管理し、フロントエンド アプリへの更新を「プッシュ」します。フロントエンド アプリの呼び出しによってリストの更新がトリガーされ、すべてのクライアントが正しいリスト データ。
問題はバックエンド側にあります。ボタンを押すと、AJAX 呼び出しが実行され、その AJAX 呼び出しによって次のコードが実行されます (一部の操作が削除されます)。
Lists.findOne({_id: active_settings.active_id}, function(error, lists_result) {
var song_list = new Array();
for (i=0; i < lists_result.songs.length; i++) {
song_list.push(lists_result.songs[i].ref);
}
Song.find({
'_id': {$in: song_list}
}, function(error, songs){
// DO STUFF WITH THE SONGS
// UPDATE SETTINGS (code trimmed)
active_settings.save(function(error, updated_settings) {
list = {
settings: updated_settings,
};
var io = require('socket.io-client');
var socket = io.connect(config.app_url);
socket.on('connect', function () {
socket.emit('update_list', {key: config.socket_key});
});
response.json({
status: true,
list: list
});
response.end();
}
});
});
ただし、response.end が機能していないようで、呼び出しがハングし続けます。さらに、リストが常に更新されるとは限らないため、socket.emit コードに問題があります。そして、応答が終了していないため、ソケット接続は開いたままであると思いますか?
私はこれまでこのサーバー側をやったことがないので、助けていただければ幸いです。(active_settings などは存在します)