2017-03-29 2 views
0

私は尋ねようとしているのは、ユーザープロファイルを取ってpdfのユーザー固有のレポートを生成するウェブサイトを持っているということです。 Pdfはバックエンドで生成されます。ユーザーが「生成」ボタンをクリックすると、ブロックメッセージが表示され、ファイルが生成されるとブロックメッセージが削除され、ファイルがタグと共に表示されます。ダウンロードリンクをクリックすることを要求せずにサーバからブラウザにファイルを送信するアプローチ

私はsocket.ioの助けを借りてこれを行うことができますし、非常にフランクになるために、この解決策を1つのブログから多くのことを理解することなくコピーしました。私のスタックはPythonでsocket.ioはノード上にあります。私の開発マシンでは完璧に動作していましたが、サーバー上ではJavaScriptで接続エラーメッセージが表示され続け、バックエンドでPOSTメッセージが失敗します。だから私は現在フロントエンドとバックエンドで問題を抱えています。私の盲目的なコピーの貼り付けのおかげで、私はその修正について無名です。

この方法に代わる方法はありますか?私はPythonベースのソケットio(この時点で私は読んで実装する)を使用すると考えることができますが、他のアプローチでも同様のことが達成できますか?私はこれを使用して生成されたパッドをクライアントに送り返し、他の通信クライアントとサーバーは存在しません。コード

を追加

それは同じように動作し、クライアントがダウンロードを開く/ページを生成し、割り当てられたIDを取得し、一度ボタンはIDがバックエンドに送信されるクリックすると生成は、今、セロリは、PDFを生成する(に変換し、 base64)、それをnodejs/notifyにIDでポストします。これで、socket.ioはすでに/ notify urlでリッスンしているので、一度データがブラウザに表示されると、それが表示されます。

ブラウザ - >靴下(登録) - > AJAX - >セロリ(タスク) - > nodejs上/通知 - >クライアントsockioブラウザは、データに

を表示するここでは、コード、

クライアントは/ブラウザのコード

// func called on generate btn press 
$client.on('notify', function(result) { 
     $.unblockUI(); 
     // alert('In Receiving function...'); 
     var $obj = $('#dynamic-pdf'); 
     $obj.hide(); 
     $obj.attr('data', result); 
     $obj.show(); 
     $('button#view-again').removeClass('disabled'); 
     $('#previe').modal('show'); 
    }); 

    blockWithMsg("Generating PDF, Please Wait..."); 

    $.ajax({ 
     url: $url, 
     data: {clientId: $clientId}, 
     method: 'POST', 
     cache: false, 
     headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'}, 
    }); 
    // func finished 

    <!-- register client on page load --> 
    <script src="http://localhost:3000/socket.io/socket.io.js"></script> 
    <script> 
     var $client = io('http://localhost:3000'), 
      $clientId = null; 

     $client.on('register', function(id) { 
      $clientId = id; 
     }); 

    </script> 

ノードjsのコード

var app = require('express')(), 
    server = require('http').Server(app), 
    io = require('socket.io')(server), 
    bodyParser = require('body-parser'); 

// Accept URL-encoded body in POST request. 
app.use(bodyParser.json({limit: '50mb'})); 
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit: 50000})); 
app.use(require('morgan')('dev')); 

// Echo the client's ID back to them when they connect. 
io.on('connection', function(client) { 
    client.emit('register', client.id); 
}); 

// Forward task results to the clients who initiated them. 
app.post('/notify', function(request, response) { 
    var client = io.sockets.connected[request.body.clientId]; 
    client.emit('notify', request.body.result); 
    response.type('text/plain'); 
    response.send('Result broadcast to client.'); 
}); 

server.listen(3000); 

私は未定義値の誤差に

+0

実際のコードの外観をスニペットで投稿する必要があります。何も見ずに反応するのは難しい。 –

答えて

0

を発する(OPに代わって投稿)取得しています。

エラーは、ブラウザJavaScriptでsocket.io接続(まだlocalhostだった)とは異なるドメインでサイトを開始したことです。

関連する問題