申し訳ありませんが、私は完全に目が覚めていないときに悪い作家になりがちです。エクスプレスノードサーバーは、非同期クライアントコールに値を返します。
私はサーバを管理するために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);
});
dropzone.on( 'success'、(file、res)=> {console.log(res)}を使用して、dropzone APIを調べていただきありがとうございます。それは解決されたポストを更新します。 – Drew
@Drew素晴らしい、あなたが答えを見つけてうれしい –