0

Expressを使用してNode.jsでファイルのアップロード作業を行うことができました。コードでは、ユーザーがアップロードしようとしているのが画像かどうかを確認しています。

ファイルが正常にアップロードされた場合、アップロードフォームを含む HTML ページに直接、ユーザーにメッセージを表示したいと考えています。ユーザーがアップロードしようとしたファイルが画像ではなかった場合、またはアップロード中に何か他のことが起こった場合も同様です。

以下のコードは機能しますが (res.send...)、メッセージのみを含む新しいページが開きます。

私の質問は、メッセージが HTML ページに直接送信されるようにコードを変更するにはどうすればよいですか? それが役に立つなら、私はJadeを使っています.

前もって感謝します!

app.post('/file-upload', function(req, res, next) {
    var fileType = req.files.thumbnail.type;
    var divided = fileType.split("/");
    var theType = divided[0];

    if (theType === "image"){
        var tmp_path = req.files.thumbnail.path;

        var target_path = './public/images/' + req.files.thumbnail.name;

        fs.rename(tmp_path, target_path, function(err) {
            if (err) throw err;

            fs.unlink(tmp_path, function() {
                if (err) {
                    throw err;
                    res.send('Something happened while trying to upload, try again!');
                }
                res.send('File uploaded to: ' + target_path + ' - ' + req.files.thumbnail.size + ' bytes');
            });
        });
    }

    else {
        res.send('No image!');
    }

});
4

2 に答える 2

1

WebSocketを使用できます。Socket.IOの使用をお勧めします。操作は非常に簡単です。クライアント側には、JavaScriptを使用してそのページに新しい情報を追加するイベントハンドラーがあります。

次に、サーバーに次のように言うことができます。

socket.emit('error', "Something happened while trying to upload, try again!");

クライアントは以下を使用します:

socket.on('error', function(data){
  //alert?
  alert(data);
});

http://socket.io/#how-to-use

于 2012-04-17T23:07:39.127 に答える
1

既に開いているブラウザ ウィンドウにメッセージを送信しようとしていることを理解していますか?

あなたができるいくつかのこと、

  1. それを Ajax して、投稿を送信し、返信情報を処理します。
  2. 現在行っているように送信しますが、フラッシュ メッセージを設定し ( http://github.com/visionmedia/express-messagesを参照)、フォーム ページを res.render するか、フォーム関数に res.redirect します。
  3. now.js または同様のソリューション。これにより、クライアント側でサーバー側関数とサーバー側コードを使用してクライアント側関数を実行できるようになります。したがって、送信時に行うことは、投稿値をサーバー側関数に渡すことです。サーバー側関数はそれを処理し、クライアント側関数をトリガーします (メッセージを表示します)。

私のお金では、オプション #2 がおそらく最も安全な方法です。JavaScript が有効になっていないクライアントでも使用できるからです。使いやすさに関しては、1 番または 3 番の方がエンド ユーザーにより合理的な外観を提供します。

于 2012-04-17T21:12:30.500 に答える