2017-02-18 10 views
-1

申し訳ありませんが、私は完全に目が覚めていないときに悪い作家になりがちです。エクスプレスノードサーバーは、非同期クライアントコールに値を返します。

私はサーバを管理するためにpassportjs(ローカル戦略)を使用しており、ファイルアップロードを管理するためにconnect-busboyを使用しています。私はパスポートがこれで役割を果たすとは思わない。ここで

は、ファイルのアップロードを管理するサーバコードです:私のクライアントページについては

app.post('/upload', isLoggedIn, (req, res) => { 
     if(req.busboy){ 
      req.pipe(req.busboy); 
      req.busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { 
       if(mimetype.match(/^image\//)){ 
        var root = path.join(__dirname, "../public/images/"); 
        if(fs.existsSync(path.join(root, filename))){ 
         var name = getUnique(path.join(root, filename)); 
        } else { 
         var name = filename; 
        } 
        var ws = fs.createWriteStream(path.join(root, name), { flags: "a" }); 
        file.pipe(ws); 
       } 
      }); 
     } 
    }); 

、コンフィギュレーション・ツールとしてサーバーに再アップロードされますJSONオブジェクトを変更するために使用されます。新しい画像を非同期的にアップロードする際には、このJSONオブジェクトを更新するファイル名を取得する必要があります。クライアント側からアップロードする場合、私はdropzonejsを使用しています。

ので、要約すると、私は非同期的に、私のサーバー上のbusboyとfsは、ファイルを保存するドロップゾーンを経由して画像の数をアップロードし、私は、ファイル名が既存のJSONオブジェクトを変更するために私のjavascriptに戻って取得したいと思います。

編集ソリューション:正しい方向に私を指しているためエリオットブラックバーンに

感謝。 file.pipe(ws);

ws.on('close',() => { 
    res.send({filename: name}); 
}); 

を、クライアントに応答を送信するには:を呼び出すことによって

。クライアント側では、以下のようにレスポンスを処理するdropzoneを変更します。

dropzone.on('success', (file, res) => { 
    console.log(res); 
}); 

答えて

1

通常のhttpレスポンスで送信してください。それはあなたが使用しているライブラリに依存しますが、ほとんどの場合、通常のreq、res、next express callを起動させることができます。これからファイルオブジェクトにアクセスして、必要なものを返すことができます。以下のような

何か:

req.send({filename: name}); // name is the filename var set earlier in the code. 

ファイルなどの編集が完了したら、あなたが名前を取得し、その返されたオブジェクトとあなたのクライアントにそれを置くことができ、あなたの応答としてオブジェクトとしてそれを受け取ることになります行動することができます。

+0

dropzone.on( 'success'、(file、res)=> {console.log(res)}を使用して、dropzone APIを調べていただきありがとうございます。それは解決されたポストを更新します。 – Drew

+0

@Drew素晴らしい、あなたが答えを見つけてうれしい –

関連する問題